mod_ssl
Apache
mod_ssl とは
mod_ssl は Apache の通信を SSL ライブラリを使って暗号化する(ようは https 通信を実現する)ためのモジュールです。
他に https を実現する方法としては Apache-SSL を使う方法もありますが、最近では mod_ssl を使う方が一般的なようです。
インストール
apache_1.3.26 + mod_ssl-2.8.10-1.3.26 の例です。
まず、暗号化に必要な SSL ライブラリとして OpenSSL をインストールします。
次に mod_ssl を mod_ssl 公式サイトから入手し、展開します。
% gzip -dc mod_ssl-2.8.10-1.3.26.tar.gz |tar xvf - % cd mod_ssl-2.8.10-1.3.26
さらに mod_ssl の configure を走らせるのですが、これには Apache のソースが必要となります。
% ./configure --with-apache=../apache_1.3.26
最後に mod_ssl で指定した Apache をコンパイル・インストールします。
% cd ../apache_1.3.26 % ./configure --enable-module=most --enable-module=so --enable-module=ssl % make % su # make install
設定
まず設定の前に、crt ファイル(サーバ証明書)と key ファイル(秘密鍵)を適当な場所に配置します。
この時各ファイルのパーミッションは 400 にしておく必要があります。
サーバ証明書は Verisign 等の認証局で申請すると取得できます(もちろん有料)が、独自認証局を作成して自分で証明書を発行することも可能です。
Verisign 等の認証局に申請する際には、CSR ファイル(認証書要求)を作成し、認証局に送ります。
秘密鍵や CSR の作成方法、独自に証明書を発行する方法等は OpenSSL を参照。
上記ファイルが設置できたら httpd.conf を適宜修正します。
基本的に make install すると httpd.conf は SSL 対応の設定がされているものが作られますので、これをひな形にして証明書のファイル等必要な設定を行います。
ポート番号はデフォルトでは 8443 になってますので、普通に https を使用したい時には 443 に変更する必要があります。
実行方法
mod_ssl 対応でインストールした Apache には sslstart 等 SSL に対応したオプションが拡張されていますので、これを使用して起動します。
# /usr/local/apache/bin/apachectl sslstart
確認方法
ブラウザでアクセスし、証明書の内容を確認するのが一般的かと思いますが、以下のようにコマンドラインでも確認可能です。
% openssl s_client -connect xxx:443
xxx は確認したいドメインです。
例えば、google.co.jp で試すとこんな感じに結果が返ってきます。
CONNECTED(00000003) depth=3 C = US, O = Equifax, OU = Equifax Secure Certificate Authority verify return:1 depth=2 C = US, O = GeoTrust Inc., CN = GeoTrust Global CA verify return:1 depth=1 C = US, O = Google Inc, CN = Google Internet Authority G2 verify return:1 depth=0 C = US, ST = California, L = Mountain View, O = Google Inc, CN = google.com verify return:1 --- Certificate chain 0 s:/C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com i:/C=US/O=Google Inc/CN=Google Internet Authority G2 1 s:/C=US/O=Google Inc/CN=Google Internet Authority G2 i:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA 2 s:/C=US/O=GeoTrust Inc./CN=GeoTrust Global CA i:/C=US/O=Equifax/OU=Equifax Secure Certificate Authority --- Server certificate -----BEGIN CERTIFICATE----- MIIgNzCCHx+gAwIBAgIIMI7RBl0QaIkwDQYJKoZIhvcNAQELBQAwSTELMAkGA1UE BhMCVVMxEzARBgNVBAoTCkdvb2dsZSBJbmMxJTAjBgNVBAMTHEdvb2dsZSBJbnRl cm5ldCBBdXRob3JpdHkgRzIwHhcNMTYwODA2MTgwODA5WhcNMTYxMDI3MTc1ODAw ... hlm3RKr5SnlEmN0+S7sMIS4xtxjx4k8UbjjuSzTIpom4NIkOkDt870QQG0uzxT9/ Y7vbP8PkbA8kuZvPnFjAhpctgKCtU41u0Qaz33f/zBtyfcHQ1U5GI7dCzrNGOfB4 eU5Rj/9z0dSNensHwSGYf+T5Gw8SC4r1qZqPRbk5gUdKsT/1wdOZHi9pzA== -----END CERTIFICATE----- subject=/C=US/ST=California/L=Mountain View/O=Google Inc/CN=google.com issuer=/C=US/O=Google Inc/CN=Google Internet Authority G2 --- No client certificate CA names sent Server Temp Key: ECDH, prime256v1, 256 bits --- SSL handshake has read 10822 bytes and written 373 bytes --- New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256 Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1.2 Cipher : ECDHE-RSA-AES128-GCM-SHA256 Session-ID: A1D10C9871BDEA9DE1FD2E699398AC72F9564FB0ADDB9B81A95A30A895E98A08 Session-ID-ctx: Master-Key: E9EABCF6B8D5BC237C46380AFF9DB8E408C62F750F09533ED3007158D868150C4A00802BAD101E6AC1AECE8D8E151070 Key-Arg : None Krb5 Principal: None PSK identity: None PSK identity hint: None TLS session ticket lifetime hint: 100800 (seconds) TLS session ticket: 0000 - 3d d0 5a bb 5a 38 15 f7-df 94 19 09 f6 9e a2 3b =.Z.Z8.........; 0010 - c4 e4 ec 65 bd 25 9a f4-5e ff e8 19 35 e0 9a fb ...e.%..^...5... 0020 - 56 1f 5e 6e 51 68 12 79-6b fc 9a b3 72 6e 0d a6 V.^nQh.yk...rn.. 0030 - 6c e8 fe c2 5f 4d 06 c1-df e2 94 c3 3c 59 f0 17 l..._M......<Y.. 0040 - dc 8a b4 9c 62 45 d2 b3-32 c3 4d 6e b8 50 95 7d ....bE..2.Mn.P.} 0050 - 0d c9 68 ff 06 22 44 97-6e e2 91 44 7d c5 6e 96 ..h.."D.n..D}.n. 0060 - 48 75 b0 97 7c 91 c7 de-73 b3 46 19 7f f5 17 f9 Hu..|...s.F..... 0070 - 0b 88 94 d8 83 a8 1c bd-3b 09 9f fe 88 75 a2 52 ........;....u.R 0080 - b6 53 bd 57 85 c3 e2 84-0c 1e da 47 aa 02 5a e8 .S.W.......G..Z. 0090 - 04 b1 b1 c1 00 d5 5d 43-30 84 86 73 cb e3 e3 f0 ......]C0..s.... 00a0 - f5 8e 66 67 ..fg Start Time: 1471338011 Timeout : 300 (sec) Verify return code: 0 (ok)
ssl_error_rx_record_too_long
Firefoxでアクセスした際に、ssl_error_rx_record_too_longというメッセージが出て、接続できないことがあります。
このケースでは、VirtualHostの設定が間違っている可能性大です。
ちなみに私の場合は、
なお、Apache側のログとしては、以下のようなエラーログが出力されます。
[Tue Mar 10 10:36:21 2009] [error] [client xxx.xxx.xxx.xxx] Invalid method in request \x16\x03\x01 [Tue Mar 10 10:36:24 2009] [error] [client xxx.xxx.xxx.xxx] Invalid method in request \x16\x03\x01