Linux SSL(https)

(2008.12.5, 2013.1.2, 2014.11.13)

apacheでSSL(Secure Socket Layer),暗号化通信をおこなう.
(環境) CentOS 5.2-5.8, CentOS 6.x

(以下プロンプトが#ならroot,$なら普通のユーザー)

インストール

mod_sslインストール
# yum install mod_ssl
秘密鍵作成(pass phraseはすぐに削除するので何でもよい)
# cd /etc/pki/tls/certs/
# make server.key

...

Enter pass phrase:
Verifying - Enter pass phrase:

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key
証明書作成(ホスト名は正確に入れること)
# make server.crt

...

Country Name (2 letter code) [GB]:JP
State or Province Name (full name) [Berkshire]:Kanagawa
Locality Name (eg, city) [Newbury]:Sagamihara
Organization Name (eg, company) [My Company Ltd]:Kitasato University
Organizational Unit Name (eg, section) []:College of Liberal Arts and Sciences
Common Name (eg, your name or your server's hostname) []:ホスト名(xx.kitasato-u.ac.jpまたは10.1.0.0など)
Email Address []:管理者のメールアドレス
秘密鍵と証明書の設定
# cd /etc/httpd/conf.d/
# cp ssl.conf ssl.conf.org

# vi ssl.conf

SSLCertificateFile /etc/pki/tls/certs/server.crt
SSLCertificateKeyFile /etc/pki/tls/certs/server.key
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt ←(SSL証明書を購入して)中間証明書がある場合

# General setup for the virtual host, inherited from global configuration
#DocumentRoot "/var/www/html"
DocumentRoot "/var/www/html"
ポート443番(https)をOPEN
rootでGUIログインして,[システム]-[管理]-[セキュリティレベルとファイヤーウォールの設定]でおこなうか,このHowtoのコマンドメモに載っている方法でおこなう.
httpdを再起動
/etc/init.d/httpd restart

設定

ディレクトリにパスワードをかけ,https:でのアクセスしかできないようにするには
そのディレクトリの.htaccessファイルにSSLRequireSSLという行を追加する.
httpからhttpsへリダイレクトさせるには,/etc/httpd/conf.dディレクトリにrewrite.confファイルを設置する。
# vi /etc/httpd/conf.d/rewrite.conf
<ifModule mod_rewrite.c>
   RewriteEngine On
   RewriteCond %{HTTPS} off
   RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</ifModule>
(注)以下の方法では,.htaccessファイルでディレクトリ表示をONにするOptions Indexes効かなくなる。解決方法は不明。
リダイレクトさせたいディレクトリに.htaccessファイルを設置し,以下の行を追加。そのディレクトリ以下のディレクトリが全てリダイレクトの対象になる。
RewriteEngine on
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://kilin.clas.kitasato-u.ac.jp/$1 [R=301,L]

2014年秋のSSL 3.0 の脆弱性 (POODLE) 対策(CVE-2014-3566)

/etc/httpd/conf.d/ssl.conf の SSLProtocol All で始まる行を検索し,
SSLProtocol All -SSLv2 -SSLv3
と書き換える。

参考

  1. CentOSで自宅サーバー構築 (http://centossrv.com/) 2008.5現在
  2. SSL 3.0 の脆弱性 (POODLE) 対策で Web サーバの SSL 3.0 を無効にした件とブラウザ側の対処まとめ(http://hyper-text.org/archives/2014/10/ssl_3_0_disable.shtml)2014.11現在