mod_ssl

最終更新日時:2017-06-12 16:58:18
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
お問い合わせは 掲示板 にて。