オレオレ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/CA CAが利用するディレクトリ(絶対パスに変更)
default_days 3650 デフォルトの証明書有効期間
※セキュリティを考慮すると証明書の有効期間はあまり長くしないほうが良い。

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.pem CAの証明書
private/cakey.pem CAの秘密鍵

なお、作成した証明書は以下のコマンドで内容の確認ができます。
#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ファイルをダブルクリックやダウンロードリンクを
設けるなど、インストール方法はケース・バイ・ケースです。