さくらのクラウドを使って、こつこつとサーバ環境を構築している今日この頃です。
作成するホームページやサービスでSSLを使わなくても、やはり、なにかとSSLな通信が必要な場面があります。例えばphpmyadminを使う時とか。
と、いうことで自己署名証明書によるSSL暗号化通信の設定についてです。
※ホームページやサービスで使う時には、こんなに安いSSL証明書もあります。
自己署名証明書の作成
OpenSSLをインストールします。
yum instal l openssl
サーバ鍵と証明書を作成します。
# cd /etc/pki/tls/certs/
# make ssl.flatlabs.net.crt
umask 77 ; \
/usr/bin/openssl genrsa -aes128 2048 > ssl.flatlabs.net.key
Generating RSA private key, 2048 bit long modulus
......................................+++
...............+++
e is 65537 (0x10001)
Enter pass phrase:
Verifying - Enter pass phrase:
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key ssl.flatlabs.net.key -x509 -days 365 -out ssl.flatlabs.net.crt -set_serial 0
Enter pass phrase for ssl.flatlabs.net.key:
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) [XX]:JP
State or Province Name (full name) []:Kagoshima
Locality Name (eg, city) [Default City]:Kagoshima-Shi
Organization Name (eg, company) [Default Company Ltd]:FlatLabs
Organizational Unit Name (eg, section) []:FlatLabs
Common Name (eg, your name or your server's hostname) []:ssl.flatlabs.net
Email Address []:flatlabs@gmail.com
サーバ鍵を移動しておきます。
# mv ssl.flatlabs.net.key /etc/pki/tls/private/
SSLの設定
mod_sslをインストールします。
# yum install mod_ssl
mod_sslをインストールすると、/etc/httpd/conf.d/にssl.confが保存されるので、そのファイルをベースに環境に合わせて設定します。以下のような感じで、VirtualHostを設定します。
# vi /etc/httpd/conf.d/ssl.conf
<VirtualHost *:443>
ServerName ssl.flatlabs.net
DocumentRoot /var/www/html/ssl.flatlabs.net/
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/pki/tls/certs/ssl.flatlabs.net.crt
SSLCertificateKeyFile /etc/pki/tls/private/ssl.flatlabs.net.key
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
</VirtualHost>
場合によっては、ディレクティブで、SSLRequireSSLを設定してSSL接続専用にしておきます。
< Directory "/var/www/html/ssl.flatlabs.net"> SSLRequireSSL </Directory>
iptablesを設定します。
# iptables -A INPUT -p tcp ---dport 443 -j ACCEPT # /etc/init.d/iptables save # /etc/init.d/iptables restart
パスフレーズの削除
現状では、Apacheの起動時に毎回パスフレーズの入力を求められます。
httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog) Some of your private key files are encrypted for security reasons. In order to read them you have to provide the pass phrases. Server ssl.flatlabs.net.key:443 (RSA) Enter pass phrase:
つまりは、このままでは、Apacheを自動起動することができません。場合によって、秘密鍵からパスフレーズを削除して入力を求められないようにします。
openssl rsa -in ssl.flatlabs.net.key -out ssl.flatlabs.net.nonepf.key
# vi /etc/httpd/conf.d/ssl.conf SSLCertificateKeyFile /etc/pki/tls/private/ssl.flatlabs.net.nonepf.key
SSL暗号化通信設定完了
ブラウザでアクセスすると、ものものしい感じの警告が出て、なんかちょっとな感じはしますが、これで、SSL暗号化通信の設定は完了です。






![[Web開発者のための]大規模サービス技術入門](http://images-jp.amazon.com/images/P/4774143073.09._SCMZZZZZZZ_SX100_.jpg)
