xxxcaqui.log

ツッコミお待ちしています

ApacheのSSL設定

ApacheSSLの設定をしていきます。

サーバ証明書を作成する方法は各認証局に従ってください。
その際に必要なCSRの作り方はSSL用のCSRを作成するをご覧ください。

前提

秘密鍵・証明書の移動とパーミッション設定

ファイルの移動

秘密鍵や証明書はどこにあっても読み込みさえ出来れば問題ないのですが、わかりやすいディレクトリに移動しておきます。

$ sudo ln -s /etc/pki/tls/private/ /etc/ssl/private
$ sudo mv somewhere/key.pem /etc/ssl/private/key.pem
$ sudo mv somewhere/cert.pem /etc/ssl/certs/cert.pem
$ sudo mv somewhere/chain.pem /etc/ssl/certs/chain.pem

パーミッションの設定

秘密鍵が他のユーザから読めると困るので、パーミッションを変更しておきます。*1

$ sudo chmod 400 /etc/ssl/private/key.pem
$ sudo chown apache:apache /etc/ssl/private/key.pem
$ sudo chown apache:apache /etc/ssl/certs/cert.pem
$ sudo chown apache:apache /etc/ssl/certs/chain.pem

Apacheの設定

mod_sslをインストール

$ sudo yum install -y mod_ssl

ssl.confの設定

#/etc/httpd/conf.d/ssl.conf
<VirtualHost *:443>
  SSLCertificateKeyFile /etc/ssl/private/key.pem
  SSLCertificateFile /etc/ssl/certs/cert.pem
  SSLCertificateChainFile /etc/ssl/certs/chain.pem
</VirtualHost>

Apacheの再起動

$ sudo service httpd restart

2013-07-16追記:AWSを使っている場合

AWSを使っている場合はSecurity Groupの設定でHTTPS(443)を許可しないとHTTPS通信ができません。

EC2インスタンス上でnetstatとか叩いて443をLISTENしててもインスタンスにリクエストが届かないので注意!*2

さいごに

これでSSL通信が可能になります。

Passenger等を使用している場合も、Passenger側に設定を行う必要はありません。

*1:そもそも、秘密鍵のパーミッションが644とかだとSSL出来なかった気もする。未確認。

*2:こんなことで3時間くらいハマってた。泣きたい。