LoginSignup
227
235

More than 5 years have passed since last update.

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

Posted at

事前準備

  • 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
227
235
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
227
235