Nginx でSSLを使ってみた(追記:SNIを含めてマルチドメインへの対応) では、nginxを使って簡単にSSL接続してみました。
今回は、apacheでSSLを使ってみます。
つまり、https:// でアクセスできるようするということです。
(SSL認証の仕組みについては、SSL 認証 の仕組みと OpenVPN の認証の仕組み を参照してください。)
Nginx でSSLを使ってみた(追記:SNIを含めてマルチドメインへの対応) では、認証局を意識せずに行った最も簡単な手順で解説しました。
今回は、認証局を意識し、認証局の証明書をウェブブラウザに組み込むことで警告メッセージを出さないような手順も含めて解説してみます。
- 目次
- 履歴
2013年1月20日 初版
SSL用のサーバー証明書作成
ここでは、プライベート認証局にて署名されたサーバー証明書を使いたいと思います。
サーバー証明書の作成は、プライベート認証局の証明書、サーバー証明書、クライアント証明書の作成方法について を参照してください。
(ここでは例として、サーバー証明書作成時の Common Name に www.exmaple.com を指定して作成します。)
- OpenSSLのインストールは、 → OpenSSLのインストールする からどうぞ。
- プライベート認証局から作成が必要な方は、 → 証明書を作成する からどうぞ。
- サーバー証明書のみ作成が必要な方は、 → サーバー用の証明書を作成する。 からどうぞ。
ここでは、サーバー証明書、秘密鍵ファイルがそれぞれ以下のファイル名で作成されたものとして、以降、記述します。
- プライベート認証局証明書 → /etc/pki/CA/cacert.pem
詳しい手順は、 → 証明書を作成する を参照してください。
以下は、先の記事の手順をかいつまんで解説しています。$ cd /etc/pki/tls/ # プライベート認証局の証明書を作成します。 # -- あらかじめ openssl-ca.cnf の作成が必要です。 $ CADAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-ca.cnf" /etc/pki/tls/misc/CA -newca ... # 認証局用パスフレーズ(パスワード)を入力します。 Enter PEM pass phrase: # 認証局用パスフレーズ(パスワード)を再入力します。 Verifying - Enter PEM pass phrase: ...
- サーバー証明書 → /etc/pki/CA/certs/www.example.com.crt
詳しい手順は、 → サーバー用の証明書を作成する。 を参照してください。
以下は、先の記事の手順をかいつまんで解説しています。$ cd /etc/pki/tls/ # サーバー証明書を作成します。 # -- あらかじめ openssl-server.cnf の作成が必要です。 $ DAYS="-days 3650" SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -newreq ... # サーバー用のパスフレーズ(パスワード)を入力します。 Enter PEM pass phrase: # サーバー用のパスフレーズ(パスワード)を再入力します。 Verifying - Enter PEM pass phrase: ... # サイト名--ウェブサーバーで利用する場合は必ずここをサイト名に合わせる Common Name (eg, your name or your server's hostname) []: www.exmple.com ... # サーバー証明書にプライベート認証局の署名を行います。 $ SSLEAY_CONFIG="-config /etc/pki/tls/openssl-server.cnf" /etc/pki/tls/misc/CA -sign ... # CA証明書を作成する際に設定したパスフレーズ(パスワード)を入力する Enter pass phrase for /etc/.../CA/private/cakey.pem: ... # サーバー証明書にファイル名を変更して移動します。 $ mv /etc/pki/tls/newcert.pem /etc/pki/CA/certs/www.example.com.crt
- サーバー秘密鍵 → /etc/pki/CA/private/www.example.com.key
サーバー秘密鍵は、先のサーバー証明書を作成した時に作成されます。
ただ、そのままでは、Apache起動時にパスフレーズ(パスワード)が必要になりますので、それを回避するためにパスフレーズをはずします。$ cd /etc/pki/tls/ # 作成したサーバー用秘密鍵へパスフレーズを埋め込みます。 $ openssl rsa -in /etc/pki/tls/newkey.pem -out /etc/pki/CA/private/www.example.com.key ... # サーバー証明書、秘密鍵を作成したときのパスフレーズを入力する Enter pass phrase for newkey.pem: writing RSA key
apache の SSL設定
apache の場合、まずは、SSLモジュールをインストールする必要があります。
以下にモジュールのインストールからapacheの設定まで簡単に解説します。
- まずは、SSLモジュールをインストールする。
まずは、SSLモジュールがインストールされていることが大前提になりますので、確認も含めてインストールしておきます。
# SSLモジュールがインストールされているか確認します。 $ rpm -qa|grep mod_ssl # SSLモジュールがインストールされていないようなので、インストールします。 $ yum -y install mod_ssl ... Complete! # 以下は、ちゃんとSSLモジュールがインストールされたか再確認しています。 $ rpm -qa|grep mod_ssl mod_ssl-2.2.15-15.el6.centos.1.i686
- apache の SSL設定する。
apache のSSL関連の設定は、すべて以下 /etc/httpd/conf.d/ssl.conf で行うことになっています。 以下にデフォルトの設定からの変更イメージを記載します。太字が編集箇所です。
/etc/httpd/conf.d/ssl.conf
... ## ## SSL Virtual Host Context ## <VirtualHost _default_:443> # General setup for the virtual host, inherited from global configuration DocumentRoot "/var/www/html" # コメントをはずす ServerName www.example.com:443 # コメントをはずす # Use separate log files for the SSL virtual host; note that LogLevel # is not inherited from httpd.conf. ErrorLog logs/ssl_error_log TransferLog logs/ssl_access_log LogLevel warn # SSL Engine Switch: # Enable/Disable SSL for this virtual host. SSLEngine on # SSL Protocol support: # List the enable protocol levels with which clients will be able to # connect. Disable SSLv2 access by default: SSLProtocol all -SSLv2 # SSL Cipher Suite: # List the ciphers that the client is permitted to negotiate. # See the mod_ssl documentation for a complete list. SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW # Server Certificate: # Point SSLCertificateFile at a PEM encoded certificate. If # the certificate is encrypted, then you will be prompted for a # pass phrase. Note that a kill -HUP will prompt again. A new # certificate can be generated using the genkey(1) command. #SSLCertificateFile /etc/pki/tls/certs/localhost.crt SSLCertificateFile /etc/pki/CA/certs/www.example.com.crt # サーバー証明書のパスを指定 # Server Private Key: # If the key is not combined with the certificate, use this # directive to point at the key file. Keep in mind that if # you've both a RSA and a DSA private key you can configure # both in parallel (to also allow the use of DSA ciphers, etc.) #SSLCertificateKeyFile /etc/pki/tls/private/localhost.key SSLCertificateKeyFile /etc/pki/CA/private/www.example.com.key # サーバー秘密鍵のパスを指定 ... </VirtualHost>
ここで設定しているのは、以下の必要最小限の項目のみの設定です。
- DocumentRoot : ドキュメントルート
- ServerName : サーバー名、ポート番号
- SSLCertificateFile : サーバー証明書
- SSLCertificateKeyFile : サーバー秘密鍵
ここでの設定は、あくまで必要最小限の設定です。
- apacheを再起動する。
ここまでの設定を終えたら、最後にapacheを再起動します。
$ /etc/init.d/httpd restart httpd を停止中: [ OK ] httpd を起動中: [ OK ]
FireFox の 設定
最後にウェブブラウザの設定例です。
先にも書いたようにプライベート認証局で署名したものは、デフォルトのウェブブラウザの設定では、警告メッセージが表示されます。
それを回避するためにプライベート認証局の証明書をウェブブラウザに取り込む必要があります。
ここでは、ウェブブラウザのFireFoxのみについて簡単に解説してみます。
- まずは、CA証明書をコピーする。
サーバーで作成したプライベート認証局の証明書(CA証明書)をコピーします。
上記の例でいうと、/etc/pki/CA/cacert.pem になります。
ファイルの拡張子は、 crt がデフォルトですから、ダウンロードする際に、private_ca.crt へ変更しておきます。
- FireFoxのオプション画面を表示する。
FireFoxの [ メニュー ] – [ オプション ] でオプション画面を表示します。
FireFoxのオプション画面から、暗号化タブをクリック、証明書を表示…をクリックします。
- FireFoxの証明書マネージャ画面からCA証明書をインポートする。
先に手順で、以下のように証明書マネージャ画面が表示されます。認証局証明書タブをクリックし、インポートボタンをクリックします。
ファイル選択の画面が表示されますので、ここで、先にダウンロードし、ファイル名を変更したCA証明書(private_ca.crt )を選択し、インポートします。
ファイルが正しく読めたら、以下の確認画面が表示されます。
このチェックは、この認証局で署名された証明書は、どこまで信用しますか?ということです。
ここは、すべてをチェックしてもOKですが、とりあえず、ウェブサイトの信頼のみ(一番上)を有効とし、OKをクリックします。
あとは、すべてのオプション関連の画面を抜けて完了です。
- 最後に https でアクセスしてみる。
最後に https でアクセスしてみましょう。
警告メッセージが表示されずに、以下のようにアドレスバーに鍵マークが表示されればOKです。
鍵マークが灰色と緑色の違いは、
灰色が、通常の証明書によるSSL接続であるのに対して
緑色が、EV 証明書によるより厳格な認証手続きを行った上でSSL接続していることを意味します。
今回は、認証局の証明書を意識的に作成してみました。そのCA証明書を正しくブラウザに取り込む(インポート)ことができれば、 プライベート認証局であっても警告メッセージをユーザに見せることなく安全なSSL接続が可能になります。
やっぱり、以下のような警告ページが表示されてしまうと、本当に大丈夫かなぁと思ってしまいますよね。
この警告メッセージの回避方法は、いろいろあると思いますが、今回のやり方が、たぶんスマートなのかなぁとも思います。あくまで既知の利用者の範囲ですが。
不特定多数の利用者への対応は、パブリック認証局を利用すべきだろうと思います。先の警告を見て、そのサイトを覗いてみようかと思う人は少ないでしょうからね。
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない、検索ができないことがあります。
コメントを投稿 :