LinuxのApacheでSSLの履歴

CA/証明書の作成

CA.pl は openssl-perl をインストールするとついてくる。
yum install openssl-perl

作業用ディレクトリにコピー
# cp /etc/pki/tls/misc/CA.pl CA.pl

出力ディレクトリを変更する
vi CA.pl
$CATOP="./CA";

同じく
vi /etc/pki/tls/openssl.cnf
[ CA Default ]
dir = "./CA"

perl CA.pl -newca # CAの作成
perl CA.pl -newreq-nodes # 証明書作成。パスフレーズいらない(-newreqでパスフレーズつき)
perl CA.pl -signreq # 署名する
perl CA.pl -pkcs12 # パッケージ化する。IEはこれで生成された newcert.p12 を読み込ませる

証明書作成する場合はCommon Nameが重要(でも暗号化するだけだったらそこまで意味は成さないのかも)

apacheの設定

標準のssl.confの一部を変えればOK。
SSLCertificateFile
->newcert.pem
SSLCertificateKeyFile
->newkey.pem
SSLCACertificateFile
->CA/cacert.pem

ってやるとこエラーがでました

(Firefox) SSL received a record that exceeded the maximum permissible length.
(Opera) Opera はサーバーに接続できませでした。サーバーは、サポートされていない SSL 2 プロトコルを使用している可能性があります。このプロトコルは、保護された通信を行う十分な安全性があると見なされていませ。サイトの所有者は、TLS 1.0 以降にアップグレードする必要があります。

解決策

NameVirtualHostにポート指定してないかららしい。たしかに。全VirtualHostファイルを書き換えないといけなかったので大変だった。
NameVirtualHost 11.22.33.44
<VirtualHost 11.22.33.44>

NameVirtualHost *:80
<VirtualHost *:80>

複数ドメイン運用はリバースプロキシを使う

443なVirtualHostが複数あると起動時に警告がでて設定が効かない。mod_rewriteのリバースプロキシで設定してやる

例えばこ

<VirtualHost *:443>
     RewriteEngine On
     RewriteCond %{HTTP_HOST} ^hoge\.example\.com
     RewriteRule ^(.*)$ http://hoge.example.com/$1 [L,P]
     ...
</VirtualHost>

参考

http://moca.wide.ad.jp/notes/ca_doc/openssl.html
http://lab.hde.co.jp/2008/08/opensslperlca.html
http://vine-linux.ddo.jp/linux/mail/ca_id.php
http://www.piyosystems.com/kuki/B2060435708/C1887229145/E117...
http://kikuz0u.x0.com/memo/hiki.cgi?%A5%D7%A5%E9%A5%A4%A5%D9...
http://park15.wakwak.com/~unixlife/practical/openssl.html