Hatena::ブログ(Diary)

La vie des marmotte RSSフィード Twitter

2010-02-03 [OpenSSL]オレオレCA構築手順

イントラネット向け、SSLプライベート認証局構築手順(備忘録)
なお、今回構築した環境は「CentOS5.4」となります。

SSLプライベート認証局のすすめ

イントラネット上でWebサービスを展開していると、
 ・「SSL暗号化通信がしたい」
 ・「お金を払ってまでSSL証明書を買いたくない」
というジレンマから自己証明書(オレオレ証明書)を利用するケースが往々としてあります。

確かに、この方法を利用すれば「SSLによる暗号化通信」という要件は満たされますが、
同様のシステムが乱立した際、「証明書のアラート」がサーバ毎に表示されてしまい
「つながんないんだけど、、、」という苦情が殺到というのはよく聞く話です。

そこで登場するのが「プライベート認証局(オレオレCA)」。
単純に構築・運用するだけでは何も変わりませんが、SSL(第三者認証)の性質上
プライベート認証局の証明書「ひとつ」をクライアントインストールすることで、
有料の証明局と同様「信頼された証明書」として扱うことが可能になります。

※最終的な「信頼性」は、認証局サーバセキュリティレベルと運用方針に
 左右されますのでご注意ください。

openssl.cnfの設定

openssl.cnfは、opensslコマンドのデフォルトの動作を設定します。
デフォルトパッケージでは、/etc/pki/tlsの下にあります。

CAの設定は、ファイルの「[ ca ]」「[ CA_default ]」の箇所となります。
基本的にはデフォルトのままでも問題ありませんが、
個人的には[ CA_default ]の下記値を変更します

設定名設定値備考
dir/etc/CACAが利用するディレクトリ(絶対パスに変更)
default_days3650デフォルトの証明書有効期間
セキュリティを考慮すると証明書の有効期間はあまり長くしないほうが良い。

CA証明書の作成

CAの証明書と秘密鍵を生成します。

# mkdir -p /etc/CA/private
# mkdir -p /etc/CA/newcerts
# touch /etc/CA/index.txt
# touch /etc/CA/serial
# echo 00 > /etc/CA/serial
# cd /etc/CA/
# openssl req -new -x509 -newkey rsa:2048 -out cacert.pem -keyout private/cakey.pem
Generating a 2048 bit RSA private key
........+++
......................................................+++
writing new private key to 'private/cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:
State or Province Name (full name) [Berkshire]:
Locality Name (eg, city) [Newbury]:
Organization Name (eg, company) [My Company Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:
Email Address []:

「Enter PEM pass phrase:」に秘密鍵パスフレーズを入力し、
証明書の情報を記載します。
ディレクティブ内容記入例
Country Name国名JP
State or Province Name都道府県Tokyo
Locality Name市区町村Kunitachi
Organization Name所属名Pyrites
Organizational Unit Name署名Lab
Common NameコモンネームPyrites Private CA
Email Addressテクニカルコンタクトメールアドレスを記載

カレントディレクトリ(/etc/CA)に以下のファイルが作成されます。
cacert.pemCAの証明書
private/cakey.pemCA秘密鍵

なお、作成した証明書は以下のコマンドで内容の確認ができます。
#openssl x509 -in cacert.pem -text

とりあえずテスト

さて、CAの構築が完了しましたので早速テストを兼ねて
ApacheSSL証明書を作成してみたいと思います。

まずは、以下のコマンドでSSLの鍵ペアを作成します。

# mkdir -p /etc/httpd/cert
# openssl req -new -keyout /etc/httpd/cert/localhost.key \
>                             -out /etc/httpd/cert/localhost.pem
※実行すると、鍵生成に必要な情報の入力が求められます。
生成されるファイル
localhost.key秘密鍵
localhost.pem公開鍵

続いて、プライベートCAで認証します。
# openssl ca -out /etc/httpd/cert/localhost.crt \
>                 -infiles /etc/httpd/cert/localhost.pem

Apacheに作成した証明書を設定します。
/etc/httpd/conf.d/ssl.confの下記設定を修正します。
SSLCertificateFile /etc/httpd/cert/localhost.crt
SSLCertificateKeyFile /etc/httpd/cert/localhost.key
なお、この状態では起動毎に鍵のパスフレーズ入力を求められるので、
パスフレーズの解除を行います。
# mv /etc/httpd/cert/localhost.key /etc/httpd/cert/localhost.key.org
# openssl rsa -in /etc/httpd/cert/localhost.key.org \
>                         -out /etc/httpd/cert/localhost.key

Apache再起動し、証明書を確認します。
# service httpd restart

最終テーマ CA証明書をクライアントインストールする

これまでの作業により、オレオレCAの構築とSSL証明書の作成ができました。
冒頭でふれた「認証局の証明書」の作成です。

標準的には、DER形式のファイルを作成します。

# cd /etc/CA
# openssl x509 -in cacert.pem -outform DER -out cacert.der

最後に、DERファイルをクライアントインストールします。
クライアントでDEFファイルをダブルクリックダウンロードリンクを
設けるなど、インストール方法はケース・バイ・ケースです。