SSL証明書(自己認証)

ApacheとCourire-IMAPでSSLを使う際に必要な証明書を自己認証で作る。
特定の者だけが使う「第四種オレオレ証明書」としての使用を想定。

オレオレ証明書の区分 第三版
http://takagi-hiromitsu.jp/diary/20071117.html#p02

作業用のディレクトリに移る(どこでも良い)。

# cd /etc/apache2/ssl/WORK

秘密鍵を作る。

# openssl genrsa -des3 -rand /var/log/syslog -out httpd.key 1024
68379 semi-random bytes loaded
Generating RSA private key, 1024 bit long modulus
…………………………………..++++++
..++++++
e is 65537 (0x10001)
Enter pass phrase for httpd.key:
Verifying – Enter pass phrase for httpd.key:

パスフレーズは適当に(二回)。
-randで乱数の種を指定する。なんでもいいのでとりあえずsyslogを使ってみる。

秘密鍵からパスフレーズを外す。

# openssl rsa -in httpd.key -out server.key
Enter pass phrase for httpd.key:
writing RSA key

生成時に入れたパスフレーズを入れる。
パスフレーズを外さないとApacheの起動時にパスフレーズを尋ねられ、自動起動できなくなる。

証明書を作る。

# openssl req -new -x509 -days 366 -key server.key -out server.crt
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
State or Province Name (full name) [Some-State]:xxxxx
Locality Name (eg, city) []:xxxxx
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxxxx
Organizational Unit Name (eg, section) []:.
Common Name (eg, YOUR name) []:*.example.com
Email Address []:webmaster@example.com

-daysは有効期間の指定(366: 一年(閏年))。
State or Province Name以下は適切に。
Common Nameでワイルドカード(*)が使用できる。ホスト名を指定するとそのホストでしか使えない。バーチャルホストで複数の名前を使う際にはワイルドカードを活用すべし。

以下のように、-configオプションでconfigファイルを明示する必要があるかもしれない。

# openssl req -new -x509 -days 366 -key server.key -out server.crt -config /etc/ssl/openssl.cnf

証明書のパーミッションを設定する。

# chmod 600 httpd.key server.crt server.key

証明書を適切な場所に移す(Apache用)。

# cp -a server.crt server.key /etc/apache2/ssl

この場所はApacheの設定ファイル(/etc/apache2/sites-available/local_machineとか)で指定している。SSLCertificateFileとSSLCertificateKeyFileがそれ。
FreeBSDの場合、portsでインストールしたのなら、/usr/local/etc/apache2/ssl.confで指定している。

Courier-IMAP用の証明書を作って配置する。

# cat server.crt server.key > courier.pem
# chmod 600 courier.pem
# mv /etc/courier/courier.pem /etc/courier/courier.pem.OLD
# cp -a courier.pem /etc/courier

ApacheとCourier-IMAP(関連)を再起動する。
reloadでもいいのかもしれないが、Courier-IMAP関連はたくさんあるので一通り立上げ直す。以下のスクリプトを利用。

#!/bin/sh
/etc/init.d/courier-pop-ssl stop
/etc/init.d/courier-pop stop
/etc/init.d/courier-imap-ssl stop
/etc/init.d/courier-imap stop
/etc/init.d/courier-authdaemon stop
/etc/init.d/courier-authdaemon start
/etc/init.d/courier-imap start
/etc/init.d/courier-imap-ssl start
/etc/init.d/courier-pop start
/etc/init.d/courier-pop-ssl start
/etc/init.d/apache2 restart

無料で証明書を発行してくれるサイトもあるらしい。
CACert.orgで無料のSSLサーバを動かすメモ
http://freebsd.fkimura.com/cacert-a0.html

無料のSSL証明書
http://psst.jp/syn/archives/000170.html

しかし、タダで誰にでも発行してくれる証明書って信頼していいんだろうか?