サーバ証明書の作成およびApacheのSSLの設定

opensslを使ってApacheでSSLを使用するためのサーバ証明書を作成します。

まずは以下のコマンドでサーバ証明書用の2048bitの秘密鍵を作成します。ここではhoge.keyというファイル名で保存します。

openssl genrsa -out hoge.key -des 2048

Apacheを起動するときに毎回秘密鍵のパスフレーズを入力するのは大変なのでパスフレーズなしの秘密鍵も作成します。ファイル名はhoge.nopass.keyにします。(追記:パスフレーズ外すなら最初から暗号化しない秘密鍵を作ればいいのか?)

openssl rsa -in my.euphe.net.key -out hoge.nopass.key

次に上で作成した秘密鍵を用いてCSR(証明書要求)を作成します。ここではhoge.csrというファイル名にします。実行すると組織の情報などの入力が求められます。そしてCNとしてサーバの名前(FQDN)を入力します。

openssl req -new -key hoge.key -out hoge.csr

ここで作成したCSRに署名をしたものがサーバ証明書となります。ここまでは正規の証明書でもオレオレ証明書でも同じです。正規の証明書ではこのCSRに商用の認証機関で署名してもらうことになります。

ちなみにCAスクリプトを使用する場合はCA -newreqで上記の作業が可能なようです。この場合、特に指定しなければファイル名などはopenssl.cnfで設定されているデフォルトが使われるようです。(ちゃんと確認していません。)

次に、オレオレ証明書の場合は、自分で作成した認証局で署名を行います。以下の例では認証局の証明書および秘密鍵がそれぞれcacert.pem、cakey.pemです。サーバ証明書のファイル名はhoge.crtとします。

openssl ca -in hoge.csr -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -out hoge.crt

CAスクリプトではCA -signで実行するようです。(こちらも未確認。)

ApacheのSSLの設定ですが、CentOSではmod_sslパッケージをインストールすることでSSLが使用可能になります。設定ファイルは/etc/httpd/conf.d/ssl.confです。以下の項目にそれぞれ上記で作成した証明書と秘密鍵を設定します。

SSLCertificateFile /etc/pki/tls/certs/hoge.crt
SSLCertificateKeyFile /etc/pki/tls/private/hoge.nopass.key

httpdを再起動すればhttpsでアクセスが可能なはずです。iptablesの設定などにも注意が必要です。

商用の認証機関で署名をしてもらったときには中間証明書が必要な場合もあります。その場合にはSSLCertificateChainFileの項目も合わせて設定を行います。