ひさびさのLinuxノウハウネタ。
友人宅サーバではSSLでアクセス出来るようにもしているんだけど、最近になって期限切れのダイアログが出るようになっていた。この証明書、VineLinuxをインストールしたとき勝手に出来ている奴で、証明書のサンプルみたいなもんだ。こんなの別にどうでもいいやと思っていたのだが、この表示を毎回見るのも気分が悪いのも確か。
ということで、SSLの証明書作成にチャレンジしてみた。といっても、Apache を SSL 対応にやSSLの証明書を作成するをその通りにやってみただけなんだけども。使っていたから期限切れになったということで、SSLが使えるかどうかの判定などは割愛ね。
1、認証局 (CA)の作成
VineLinuxの場合、CAはCA.shではなくてCAと言う名前で入っている模様。場所は/usr/share/ssl/misc/CAだ。
取り合えず作業用のディレクトリを作ってそこにこのCAをコピーする。
[Vine]# cd /usr/local/ssl
[Vine]# cp /usr/share/ssl/misc/CA ./
準備が出来たら、このCAスクリプトを実行する。
CA certificate filename (or enter to create) そのままenterでOK
Making CA certificate …
Generating a 1024 bit RSA private key
………………++++++
……………++++++
writing new private key to ‘./demoCA/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) [AU]:JP 日本ならJPだな
State or Province Name (full name) [Some-State]:Miyagi 都道府県
Locality Name (eg, city) []:Sendai 市区町村(任意?)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:oyajiman 組織名
Organizational Unit Name (eg, section) []: 部署名(任意?)
Common Name (eg, YOUR name) []:oyajiman.net サーバのホスト名(FQDN)
Email Address []: 連絡先E-Mailアドレス
これで/usr/local/ssl/demoCA/以下に認証局の証明書と認証局の秘密鍵などが出来ている。
2、公開鍵の作成
と入力すると公開鍵の作成が始まる。何か適当なファイルは乱数生成の鍵なのである程度のサイズがあれば何でもいいみたい。
Generating RSA private key, 1024 bit long modulus
……++++++
…………………………………………….++++++
e is 65537 (0x10001)
Enter pass phrase for serverkey.pem: 公開鍵のパスフレーズを入力
Verifying – Enter pass phrase for serverkey.pem: 公開鍵のパスフレーズを再入力
これで公開鍵が出来た。ただ、このまま使うとApacheの起動のたびに公開鍵パスフレーズを問い合わせられて面倒らしい。よって利便性を重視しパスフレーズを解除しておく。
Enter pass phrase for serverkey.pem: 公開鍵のパスフレーズを入力
writing RSA key
3、認証局への申請書 (CSR)の作成
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) [AU]:JP 日本ならJPだな
State or Province Name (full name) [Some-State]:Miyagi 都道府県
Locality Name (eg, city) []:Sendai 市区町村(任意?)
Organization Name (eg, company) [Internet Widgits Pty Ltd]:oyajiman 組織名
Organizational Unit Name (eg, section) []: 部署名(任意?)
Common Name (eg, YOUR name) []:oyajiman.net サーバのホスト名(FQDN)
Email Address []: 連絡先E-Mailアドレス
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []: 不要
An optional company name []: 不要
上記の入力は秘密鍵と同じにしないとマズイらしい。
4、証明書の作成
Using configuration from /usr/share/ssl/openssl.cnf
32698:error:0E06D06C:configuration file routines:NCONF_get_string:no value:conf_lib.c:329:group=CA_default name=unique_subject
Enter pass phrase for demoCA/private/cakey.pem:秘密鍵パスフレーズを入力
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Jul 5 11:53:24 2007 GMT
Not After : Jul 4 11:53:24 2008 GMT
Subject:
countryName = JP
stateOrProvinceName = Miyagi
organizationName = oyajiman
commonName = oyajiman.net
emailAddress = 連絡先E-Mailアドレス
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
56:D4:3E:58:E7:5B:59:48:50:16:86:EE:3A:D9:33:8C:63:E8:FA:B4
X509v3 Authority Key Identifier:
keyid:4D:86:CF:76:EC:72:55:56:2E:FD:59:29:4D:46:5E:62:C3:18:64:F3
DirName:/C=JP/ST=Miyagi/L=Sendai/O=oyajiman/CN=oyajiman.net/emailAddress=連絡先E-Mailアドレス
serial:00
Certificate is to be certified until Jul 4 11:53:24 2008 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
5、Apacheの設定
作成した証明書などをApacheで使うためには2つの方法がある。ひとつ目はApacheの設定ファイルを書き換える方法、もうひとつは現在ある証明書・公開鍵を作成したものに置き換えてしまう方法だ。後者の方がトラブルが出にくそうなので、この方法で試してみる。
[Vine]# cp /etc/httpd/conf/ssl.crt/server.crt /etc/httpd/conf/ssl.crt/server.crt.bak バックアップして
[Vine]# cp /usr/local/ssl/cert.pm /etc/httpd/conf/ssl.crt/server.crt 上書き
公開鍵のコピー
[Vine]# cp /etc/httpd/conf/ssl.key/server.key /etc/httpd/conf/ssl.key/server.key.bak バックアップして
[Vine]# cp /usr/local/ssl/serverkey.pem /etc/httpd/conf/ssl.key/server.key 上書き
最後にApacheを再起動しておしまい。
