Webサーバ上で色々なWebアプリを動かしているのでSSL化してセキュリティの確保をしてみます。
SSLをするには証明書が必要なわけですが、いわゆるオレオレ証明書ではなく無料で証明書を発行してくれるStartSSLのサービスを使ってみます。
最初にWebサーバであるApacheがSSLに対応しているか確認しておきます。
mod_ssl.cが読み込まれていればOKです。
# /usr/local/apache2/bin/httpd -l |grep ssl mod_ssl.c
StartSSLのサイトでアカウントを作成して証明書の発行手続きをします。
証明書を発行してもらうためにはCSRが必要なのですがStartSSLの場合はCSRがなくても大丈夫です。
CSRを作成する場合は以下の手順で行います。
1.サーバの秘密鍵を作成
秘密鍵生成時にランダムな値が必要になるので/dev/randomを使用します。
# openssl genrsa -rand /dev/random -des3 -out kaju.jp.key 1024
2.CSRを作成
先ほど作った秘密鍵(kaju.jp.key)を使ってCSRを作成します。
証明書に含める情報を色々聞かれるので入力していきます。
※Common Nameは実際に動かすサーバのFQDNと同じにする必要があるので注意。
# openssl req -new -key kaju.jp.key -out kaju.jp.csr
3.サーバ証明書を発行
CSRをstartsslに送付するとサーバ証明書が発行されるのでWebサーバ上に保存します。
4.CA証明書と中間CA証明書の入手
startsslのCA証明書と中間CA証明書をWebサーバ上に保存します。
# wget https://www.startssl.com/certs/ca.crt # wget https://www.startssl.com/certs/sub.class1.server.ca.crt
次にApacheの設定を行います。
【/usr/local/apache2/conf/httpd.conf】
Include conf/extra/httpd-ssl.conf
【/usr/local/apache2/conf/extra/httpd-ssl.conf】
Listen 443 <VirtualHost _default_:443> DocumentRoot "/usr/local/apache2/htdocs" LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" ErrorLog /var/log/httpd/ssl_default_error.log TransferLog /var/log/httpd/ssl_default_access.log SSLEngine on SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL SSLCertificateFile /usr/local/apache2/conf/kaju.jp.crt SSLCertificateKeyFile /usr/local/apache2/conf/kaju.jp.key SSLCertificateChainFile /usr/local/apache/conf/sub.class1.server.ca.crt SSLCACertificateFile /usr/local/apache/conf/ca.crt CustomLog /var/log/httpd/ssl_request.log \ "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b" </VirtualHost>
設定を確認してOKだったらApacheを再起動します。
# /usr/local/apache2/bin/apachectl configtest Syntax OK # /usr/local/apache2/bin/apachectl start Apache/2.2.8 mod_ssl/2.2.8 (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 kaju.jp:443 (RSA) Enter pass phrase: OK: Pass Phrase Dialog successful.
プロセスの確認をしておきます。
# ps aux |grep httpd root 9897 18.0 2.0 55948 10512 ? Ss 14:53 0:01 /usr/local/apache2/bin/httpd -k start apache 9898 0.0 1.6 55756 8456 ? S 14:53 0:00 /usr/local/apache2/bin/httpd -k start apache 9900 0.0 1.6 55948 8592 ? S 14:53 0:00 /usr/local/apache2/bin/httpd -k start apache 9901 0.0 1.6 55948 8588 ? S 14:53 0:00 /usr/local/apache2/bin/httpd -k start apache 9902 0.0 1.6 55948 8588 ? S 14:53 0:00 /usr/local/apache2/bin/httpd -k start apache 9903 0.0 1.6 55948 8588 ? S 14:53 0:00 /usr/local/apache2/bin/httpd -k start apache 9904 0.0 1.6 55948 8588 ? S 14:53 0:00 /usr/local/apache2/bin/httpd -k start # netstat -an Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN
コメント