SSブログ

プライベートCAでのサーバー証明書の発行 [CentOS]

Web サーバーの SSL 通信のため、OpenSSL を使用したプライベート CA の構築とサーバー証明書の発行が必要となり、環境を構築した。
PKI 等についてはそれなりの知識は持っていたが、実際に実現するためにはそれなりの時間を要したため、備忘録として手順をまとめてみた。

まず、実施する項目は、下記の通りである。

・プライベート CA の構築
・サーバー証明書を発行する対象(=サイト)での秘密鍵の作成
・上記の秘密鍵を使用した CSR(Certificate Signing Request/証明書署名要求) の作成
 (秘密鍵に対応する公開鍵の作成とサーバーに関する情報の作成)
・プライベート CA でのサーバー証明書の発行
 (プライベート CA の秘密鍵での CSR への署名)
・Web サーバーの SSL の設定
・プライベート CA のルート証明書のクライアントへの配布

次に、今回実施した手順は、下記の通りである。
(CentOS 5.x 上で実施。)

1. プライベート CA の構築


(1) オリジナルの CA 情報の保存

# cd /etc/pki
# mv CA CA.org


(2) /etc/pki/tls/openssl.cnf の編集 (編集後、openssl.cnf-CA にコピー)

# cp -p openssl.cnf openssl.cnf.org
# vi openssl.cnf (変更箇所は下記の通り)
# diff openssl.cnf openssl.cnf.org
109c109
< default_bits		= 2048
---
> default_bits		= 1024
178,179c178
< basicConstraints=CA:TRUE
< nsCertType = sslCA
---
> basicConstraints=CA:FALSE
# cp -p openssl.cnf openssl.cnf-CA


(3) CA 構築用のスクリプトの実行

# cd /etc/pki/tls/misc
# ./CA -newca
 (秘密鍵のパスフレーズの入力が必要)

2. サーバーの秘密鍵の作成


(1) /etc/pki/tls/openssl.cnf の編集 (編集後、openssl.cnf-server にコピー)

# cp -p openssl.cnf.org openssl.cnf
# vi openssl.cnf (変更箇所は下記の通り)
# diff openssl.cnf openssl.cnf.org
109c109
< default_bits		= 2048
---
> default_bits		= 1024
184c184
< nsCertType			= server
---
> # nsCertType			= server
# cp -p openssl.cnf openssl.cnf-server


(2) 秘密鍵の作成

# cd /etc/pki
# mv server server.sav (server が存在する場合のみ実行)
# mkdir server
# cd server
# openssl genrsa -aes256 -out server.key 2048
 (秘密鍵のパスフレーズの入力が必要)


(3) パスフレーズの解除


Apache の起動時にパスフレーズを尋ねられないようにするための対応である。
(上記の秘密鍵の作成時に -aes256 を指定しないことでも同様の結果が得られる。)

# mv server.key server.key.org
# openssl rsa -in server.key.org -out server.key

3. サーバーの CSR の作成
# openssl req -new -key server.key -out server.csr

4. プライベート CA でのサーバー証明書の発行
# cd /etc/pki/tls/misc
# openssl ca -in /etc/pki/server/server.csr -keyfile /etc/pki/CA/private/\
cakey.pem -cert /etc/pki/CA/cacert.pem -out /etc/pki/server/server.crt
 (CA の秘密鍵のパスフレーズの入力が必要)

5. Web サーバーの SSL の設定 (Apache の場合)
# cd /etc/httpd/conf.d
# vi ssl.conf (変更内容は下記の通り)
 - SSLCertificateFile: サーバー証明書のパスを設定
  SSLCertificateFile /etc/pki/server/server.crt
 - SSLCertificateKeyFile: サーバーの秘密鍵のパスを設定
  SSLCertificateKeyFile /etc/pki/server/server.key
# /etc/init.d/httpd restart

6. プライベート CA のルート証明書のクライアントへの配布


(1) CA のルート証明書をクライアントへの配布


cacert.pem を cacert.crt にリネームして、配布する。
または、必要部分のみをコピーペーストし cacert.crt に保存後、配布する。

必要な部分とは、下記の部分である(これ以外の部分はコメントである)。
・[-----BEGIN CERTIFICATE-----] から [-----END CERTIFICATE-----] まで

また、拡張子を crt に変更するのは、Windows の拡張子の関連付けへの対応である。
(*.crt は [ファイルの種類: セキュリティ証明書] として登録されている。)


(2) クライアント(Web ブラウザ)への CA のルート証明書のインストール


・受信した証明書を認証局(CA) の証明書としてインストールする。
・Web ブラウザを再起動する(インストールした証明書を有効にするため)。



nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

※ブログオーナーが承認したコメントのみ表示されます。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。