ApacheでSSL通信(https)を設定する

2010年2月25日

SSL通信(https)は、現代のWebサーバーには不可欠な技術です。 特に、個人情報を扱ったり決済機能を扱ったりするようなサービスを開発する場合はなおさらです。 そんなとき、SSL通信を使いますよね。 証明書は、第三者発行機関から入手する必要がありますが、有料のところがほとんどです。趣味の範囲で楽しむ程度なら、購入せず、「 *自己証明書* 」というものを使うので十分です。 これなら、どこにも依頼せず、無料でhttps通信を実現できます。

(1) opensslの設定 


$ emacs /etc/ssl/openssl.cnf 

     # 以下2つの行をコメントアウトする。 
    nsCertType = server 
    nsCertType = sslCA,emailCA h3. 


(2) 証明書(自己証明書)の作成 


$ cd /usr/lib/ssl/misc/
$ ./CA.sh -newca 

・秘密鍵(demoCA/private/cakey.pem)、公開鍵(demoCA/cacert.pem)を作成する。 

・自己証明書の場合、demoCAというディレクトリ配下に作成される。 

 $ sudo openssl rsa -in ./demoCA/private/cakey.pem -out demoCA/private/cakey.pem
 ※ Apache起動のたびにパスフレーズを聴かれるので、パスフレーズを消す。
 ※ -outのcakey.pemは、別ファイル名でもよい。
 $ sudo openssl x509 -in ./demoCA/cacert.pem -out demoCA/cacert.crt 

・証明書(demoCA/cacert.crt) を作成する。
 $ sudo openssl x509 -inform pem -in demoCA/cacert.pem -outform der -out demoCA/ca.der

・demoCA/ca.derを作成する。 


(3) 証明書をApacheに登録する。 


 $ sudo mkdir /etc/apache2/ssl
 $ sudo cp demoCA/cacert.crt /etc/apache2/ssl
 $ sudo mkdir /etc/apache2/ssl/private
 $ sudo cp demoCA/private/cakey.pem /etc/apache2/ssl/private
 $ cd /etc/apache2/mods-available
 $ sudo cp /usr/share/doc/apache2.2-common/examples/apache2/extra/httpd-ssl.conf.gz .
 $ gzip -d httpd-ssl.conf.gz
 $ sudo ln -s /etc/apache2/mods-available/httpd-ssl.conf /etc/apache2/mods-enabled 


(4) httpd-ssl.confに秘密鍵と公開鍵、それに紐付くサーバ名を登録する。


$ sudo emacs httpd-ssl.conf
   # 以下項目を書き換える。
   DocumentRoot "/var/www"
   SSLCertificateFile /etc/apache2/ssl/cacert.crt
   SSLCertificateKeyFile /etc/apache2/ssl/private/cakey.pem
$ sudo a2enmod ssl
   # 上記コマンドを実行することで、以下シンボリックリンクが作成される。
   # /etc/apache2/mods-enabled/ssl.conf, /etc/apache2/mods-enabled/ssl.loadの
   # シンボリックリンクが作成される。
$ sudo a2ensite /etc/apache2/mods-enabled/httpd-ssl.conf h


(5) ssl通信(https通信)用のポート(443)を解放する。


これは各人の動作環境で必要に応じて設定して下さい。ファイヤーウォールの設定です。