Help us understand the problem. What is going on with this article?

Qualysの SSL Server TestでA+評価を取得した設定例(2017-01-15時点, CentOS7 + Apache HTTPD 2.4.6)

More than 3 years have passed since last update.

2017-01-15 時点で、以下の環境で Qualys SSL Labs の SSL Server Test で A+ 評価を取得できましたので、設定例として公開します。

OS:
$ cat /etc/centos-release
CentOS Linux release 7.3.1611 (Core)

Apache HTTPD, mod_ssl, OpenSSLはCentOS7提供のRPMを利用:
httpd-2.4.6-45.el7.centos.x86_64
openssl-1.0.1e-60.el7.x86_64
openssl-libs-1.0.1e-60.el7.x86_64
mod_ssl-2.4.6-45.el7.centos.x86_64

証明書 : Let's Encrypt で取得したRSA 2048bit の証明書を使用

対象ドメイン : www.glamenv-septzen.net

"SSL Server Test" はセキュリティ専門会社のQualysが無償で提供している、証明書とSSL/TLSの設定についてセキュアな設定になっているか、代表的な既知の脆弱性が無いかなどをチェックしてくれるツールです。チェック対象のドメインには、インターネットから接続できる必要があります。
このratingが高くなるほど、そのサイトの証明書とSSL,TLS設定はよりセキュアな状態であると考えられます。

Let's Encrypt で証明書を取得した流れについては以下参照:

注意:今後のSSL/TLS関連の発展や脆弱性動向により評価が変化する場合があります。あくまでも 2017-01-15 時点ではこうだった、という参考として本記事をご活用ください。

方針

Webを中心としたソフトウェアの技術情報がメインの個人blogサイトですので、以下のような方針としました。

  • 想定読者層から、古いブラウザ/スマホ端末/ガラケーでアクセスしてくる人は殆ど居ないと想定し、プロトコルバージョンをTLSv1.2のみに絞る。
  • IE10以前, Android 4.x系以前, JDK 1.7以前 などサポート切れ含む古めのブラウザ・クライアントには対応しない。
  • FS(Forward Secrecy)のみに絞り、さらに Apache HTTPD 2.4.6 だとDHE鍵パラメータをカスタマイズしてないようなので、DHE系のCipherSuiteは使わない。
    • => 鍵交換はECDHE系のみに絞る。想定読者層としてもECDHE系をサポートしていないブラウザ/クライアントからのアクセスは殆ど無いと想定。
    • => これを以て Logjam 対策とする。
    • なお、RHEL(ひいてはCentOS側)で独自にDHE鍵パラメータを指定できるようなパッチが当たっていないか調べてみたが、2017-01-15時点ではパッチ有無が不明に終わった。
  • HTTP Strict Transport Security (HSTS) は有効化する。
    • 対象ドメインの下にサブドメインを作る予定が無いので、特に副作用は考えず、 includeSubDomains を指定。

※以下については、ぶっちゃけ、2017-01-15時点でこれら無しで A+ 評価取れてしまったので、時間の都合 + 対応する動機が無くなったため、見送ってます。

  • HSTS Preload
  • Certificate Transparency
  • Public Key Pinning (HPKP)
  • DNS Certification Authority Authorization (CAA)
    • (DNS CAAの参考資料は後述)
    • 今回の対象ドメインはお名前.comのDNSレコード設定機能でDNS設定をしているが、2017-01-15時点ではCAAレコードタイプをサポートしていなかったため、諦めた。
    • (ドメインNavi ->「ドメイン設定」->「ネームサーバーの設定」->「DNS関連機能の設定」->「DNSレコード設定」で、登録できるレコード設定に"CAA"が無かった。)

設定例

/etc/httpd/conf.d/ssl.conf
Listen 443 https
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
# ...

# OCSP Stapling のキャッシュディレクトリとキャッシュサイズ指定
# デフォルトで SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
# となっていたので、ディレクトリをそこに揃えた。
SSLStaplingCache shmcb:/run/httpd/stapling_cache(128000)

<VirtualHost *:443>
# ...
<Directory "(...)">
    # ...
    Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</Directory>

SSLEngine on

# プロトコルの明示的な指定により、TLSv1.1/TLSv1.0/SSL3/SSL2 を無効化
# (Android 4.x 系, IE10以前は切り捨てる)
SSLProtocol TLSv1.2

# CipherSuiteを ECDHE + AES 系のみに絞る。
# (from https://mozilla.github.io/server-side-tls/ssl-config-generator/)
# -> IPA SSL/TLS暗号設定ガイドライン, C.2.2. OpenSSL 系での暗号スイートの設定例 からDHE系を外している。
# Apache HTTPD 2.4.6 のためDHE鍵パラメータを設定できなかったこともあり、
# DHE系を外すことでLogjam対策も完了したことにする。
SSLCipherSuite ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256

# 暗号スイート順序はサーバ側の順序を優先する設定を有効化
SSLHonorCipherOrder on

# 明示的にSSL圧縮をOFF
# (from https://mozilla.github.io/server-side-tls/ssl-config-generator/)
SSLCompression off

# OCSP Stapling 有効化
SSLUseStapling on
# (from https://mozilla.github.io/server-side-tls/ssl-config-generator/)
SSLStaplingResponderTimeout 5
SSLStaplingReturnResponderErrors off

SSLCertificateKeyFile   /etc/letsencrypt/live/www.glamenv-septzen.net/privkey.pem
SSLCertificateFile      /etc/letsencrypt/live/www.glamenv-septzen.net/cert.pem
SSLCertificateChainFile /etc/letsencrypt/live/www.glamenv-septzen.net/chain.pem

# ...
</VirtualHost>

https -> https リダイレクト設定:

<IfModule mod_rewrite.c>
RewriteEngine On
#...
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,redirect=301]
#...
</IfModule>

テスト結果

参考資料

OCSP Stapling

Logjam 対策

HSTS

http -> https リダイレクト設定

DNS Certification Authority Authorization (CAA)

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした