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

2010/02/25

SSL通信(https)は、現代のWebサーバーには不可欠な技術です。

特に、個人情報を扱ったり決済機能を扱ったりするようなサービスを開発する場合はなおさらです。

そんなとき、SSL通信を使いますよね。
証明書は、第三者発行機関から入手する必要がありますが、有料のところがほとんどです。趣味の範囲で楽しむ程度なら、購入せず、「 自己証明書 」というものを使うので十分です。

これなら、どこにも依頼せず、無料でhttps通信を実現できます。

(1) opensslの設定

    $ emacs /etc/ssl/openssl.cnf
      # 以下2つの行をコメントアウトする。
      nsCertType = server
      nsCertType = sslCA,emailCA

(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

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

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

blog comments powered by Disqus
カテゴリー