Linux
Ubuntu
SSL

独自SSLサーバ認証局(CA)作成とサーバ証明書発行

More than 5 years have passed since last update.

事前準備


  • 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