事前準備
- OpenSSL インストール
- Apache+mod_ssl or Apache-SSL インストール
作業手順(CA構築編)
事前設定(openssl.conf修正等)
/etc/ssl/openssl.conf
を修正します。最初にCA用ディレクトリを指定します。
dir = /etc/ssl/hogeCA
/etc/ssl/hogeCA の配下に certs,private,crl,newcerts のディレクトリを作成します。
mkdir -p /etc/ssl/hogeCA/certs
mkdir -p /etc/ssl/hogeCA/private
mkdir -p /etc/ssl/hogeCA/crl
mkdir -p /etc/ssl/hogeCA/newcerts
privateには秘密鍵が置かれるので以下のようにします。
chmod 700 private
シリアルを初期化します。
echo "01" > /etc/ssl/hogeCA/serial
証明書データベースを初期化します。
touch /etc/ssl/hogeCA/index.txt
CA証明書/秘密鍵作成
自己署名済みの証明書と秘密鍵を作成します。-days 1825 はCA証明書の有効期限です。365日*5年としています。 適当に変えてください。
cd /etc/ssl/hogeCA
openssl req -new -x509 -newkey rsa:2048 -out cacert.pem -keyout private/cakey.pem -days 1825
パスフレーズを聞かれます。CA局のマスターパスワードみたいなモノなので、忘れない文字列を入れてください。
Enter PEM pass phrase: ***
証明書情報が聞かれます。正しく入れてください。 ベリサインのサイトを参考にすると良いと思われます。 http://www.verisign.co.jp/server/help/csr/capache_new.html
Country Name: JP
State or Province Name: Kanagawa
Locality Name: hogehoge
Organization Name: foo bar
Organizational Unit Name: (なんかあれば)
Common Name: (サーバのFQDN/www.hoge.comとか)
Email Address: (あれば)
作成が終わると以下のファイルができあがります。
/etc/ssl/hogeCA/cacert.pem : 自己署名済みCA証明書
/etc/ssl/hogeCA/private/cakey.pem : CA証明書の秘密鍵
CA証明書の秘密鍵は他人にみられるとこまるので、こうします。
chown root:root /etc/ssl/hogeCA/private/cakey.pem
chmod 600 /etc/ssl/hogeCA/private/cakey.pem
証明書が正しく出来たかを確認するには、以下のコマンドを発行します。
openssl x509 -in /etc/ssl/hogeCA/cacert.pem -text
ブラウザにCA証明書を組み込む
これをしないと、アクセスするたびに警告が発生します。 以下のコマンドでブラウザに取り込めるDER形式にエンコードします。
openssl x509 -inform PEM -outform DER -in /etc/ssl/hogeCA/cacert.pem -out /etc/ssl/hogeCA/hogeCAcert.der
hogeCAcert.der をブラウザからダウンロード出来るようにします。
cp /etc/ssl/hogeCA/hogeCAcert.der /var/www/
また、*.derファイルのMIMEタイプを登録する必要があります。
- /ver/www/.htaccess -
AddType application/x-x509-ca-cert der
- ここまで -
IE6.0の場合ですが、http://www.hoge.com/hogeCAcert.der とかアクセスすると、 ファイルのダウンロードが表示されてファイル種別:セキュリティ証明書になっています。 ここで、「開く」を選択すると「証明書」ダイアログが表示されるので「証明書のインストール」を選んでください。 以下の質問は「次へ」としてください。最後に「ルート証明書ストア」と出たら「はい」を選択すれば自己認証CAの 証明書がインストールされます。 インストールは、Opera7,Mozilla Firebird/0.6 でも確認済み
作業手順(サーバ認証編)
作成した自己認証CA局を使って、目的のサイト自体の証明書を発行します。 ここからちょっと判りにくくなります。自分の立場(演じる役)を明確にさせておきましょう。 ,役,説明 ,CA管理者,ベリサインみたいな役 ,サーバ管理者,CAにサーバが発行する証明書を署名して欲しい役 !鍵ペアと証明書要求(CSR)作成(サーバ管理者) 判りやすさを最優先にする意味で、以下のようなディレクトリを作成しました。
/etc/ssl/www.hoge.com
鍵ペアと証明書要求(CSR)ファイルを作成します。
openssl req -new -keyout /etc/ssl/www.hoge.com/hoge_key.pem -out /etc/ssl/www.hoge.com/hoge_csr.pem
証明書情報が聞かれます。
Country Name: JP
State or Province Name: Kanagawa
Locality Name: hogehoge
Organization Name: foo bar
Organizational Unit Name: (なんかあれば)
Common Name: (CA局のFQDN/www.hoge.comとか)
Email Address: (あれば)
A challenge password: (パスワード)
作成が終わると以下のファイルができあがります。
/etc/ssl/www.hoge.com/hoge_csr.pem : サーバ証明書要求(CSR)
/etc/ssl/www.hoge.com/hoge_key.pem : サーバ秘密鍵
自己認証CA局で署名(CA管理者)
では、サーバ証明書要求(CSR)を先ほど作成した自己認証CA局で署名しましょう。
openssl ca -out /etc/ssl/www.hoge.com/hoge_cert.pem -infiles /etc/ssl/www.hoge.com/hoge_csr.pem
を実行すると、CA局は「本当に署名していいの?」と確認します。迷わず[y]を選んでください。
Enter PEM pass phrase:(CA局パスフレーズ)
Check that the request matches the signature
Signature ok
The Subjects Distinguished Name is as follows
countryName :PRINTABLE:(サーバ証明書情報)
stateOrProvinceName :PRINTABLE:(サーバ証明書情報)
localityName :PRINTABLE:(サーバ証明書情報)
organizationName :PRINTABLE:(サーバ証明書情報)
commonName :PRINTABLE:(サーバ証明書情報)
emailAddress :IA5STRING:(サーバ証明書情報)
Certificate is to be certified until 時間 GMT (365 days)
その後、自己認証CA局で管理する?(みたいな事)を聞かれるので[y]を選んでください。 これをしないと、あとからバージョンアップが出来ない!?
1 out of 1 certificate requests certified, commit? [y/n]
証明書が正しく出来たかを確認するには、以下のコマンドを発行します。
openssl x509 -in /etc/ssl/www.hoge.com/hoge_cert.pem -text
また、現在出来上がったファイルはこんな感じとなります。
/etc/ssl/www.hoge.com/hoge_csr.pem : サーバ証明書要求(CSR) ←もういらない!?
/etc/ssl/www.hoge.com/hoge_key.pem : サーバ秘密鍵
/etc/ssl/www.hoge.com/hoge_cert.pem : サーバ証明書(署名済み)
証明書と秘密鍵をサーバに組み込みます
Apache+mod_sslでもApache-SSLでも、こんな感じで登録すればオッケーです。
SSLCertificateFile /etc/ssl/www.hoge.com/hoge_cert.pem
SSLCertificateKeyFile /etc/ssl/www.hoge.com/hoge_key.pem
トピックス
- Apache+mod_ssl/Apache-SSLの起動時パスフレーズを削除する方法です。
サーバ再起動時にいちいちパスフレーズを入力する必要が無くなります。 パスフレーズは、サーバ秘密鍵に書かれているのでこんな感じでRSAキーを書き込みます。
openssl rsa -in /etc/ssl/www.hoge.com/hoge_key.pem -out /etc/ssl/www.hoge.com/hoge_key.pem.nopass
Apache+mod_ssl/Apache-SSLの設定を、このファイル名に変更してください。
SSLCertificateKeyFile /etc/ssl/www.hoge.com/hoge_key.pem.nopass
- 発行後、期限切れのサーバ証明書を更新するには
同一サイトに対するサーバ証明書を発行するには、一度古くなったサーバ証明書を、CAから削除する必要があります。
openssl ca -revoke /etc/ssl/www.hoge.com/hoge_cert.pem
その後、www.hoge.com 以下のファイル群を待避させる。
mkdir /etc/ssl/www.hoge.com/2004bk/
mv /etc/ssl/www.hoge.com/* 2004bk
最後に、"作業手順(サーバ認証編)"を最初から行えば、サーバ証明書の更新が行えます。
- 自己認証CA局でより汎用的に署名するには
デフォルト設定だと、国名・地域・会社名が署名してもらいたい証明書と同一でないと弾くポリシーになっています。 このポリシーを変更するには /etc/ssl/openssl.conf を以下のようにします。
# For the CA policy
[ policy_match ]
countryName = supplied
stateOrProvinceName = supplied
organizationName = supplied
organizationalUnitName = optional
commonName = supplied
emailAddress = optional