Let’s Encrypt で取得した証明書で SSLチェッカーのA判定を目指してみた

Let’s Encryptのおかげで、SSL証明書の取得が無料で簡単にできて非常にありがたいです。

SSL証明書で通信を暗号化していても、サーバで正しく設定がされていないとセキュリティ的によろしくないない。なので、SSLチェッカーでA判定をいただけるようにサーバの設定を見直しました。

 

 

作業環境
OS : CentOS 7.2
HTTP server : Apache/2.4.6
コモンネーム : ssl.sabakan.red
ドキュメントルート : /var/www/html

 

作業内容

1.Let’s Encryptのインストールと証明書の取得

2.Apache HTTP ServerにSSL設定を追加

3.SSLチェッカーで証明書の分析

4.証明書の自動更新(CRON)

 

 

1.Let’s Encryptのインストールと証明書の取得

 

パッケージを追加

Let’s Encryptを入手するためには、Gitが必要なのでインストールします。

# yum install git

 

証明書を取得

まず、任意のディレクトリに移動して、Gitを使いクローンを取得します。

# cd /usr/local/src
# git clone https://github.com/letsencrypt/letsencrypt

 

次に、取得したディレクトリに移動して「letsencrypt-auto」コマンドを実行します。このコマンドは、Let’s Encryptのインストールに必要なパッケージのインストールや設定を自動で行ってくれます。

# cd letsencrypt
# ./letsencrypt-auto --help all

 

最後に証明書を取得します。コマンドオプションには、ドキュメントルート(-w)・コモンネーム(-d)・メールアドレス(-m)をつけます。

# ./letsencrypt-auto certonly \
--webroot -w /var/www/html \
-d ssl.sabakan.red \
-m test@test.sabakan.red \
--agree-tos

「--agree-tos」オプションをつけると利用規約に合意したことになり、面倒なUI画面をスキップできます。

 

証明書の取得に成功していれば、「/etc/letsencrypt/live/コモンネーム/」に証明書類が作成されているはず。

# ls /etc/letsencrypt/live/ssl.sabakan.red/
cert.pem  chain.pem  fullchain.pem  privkey.pem

 

 

2.Apache HTTP ServerにSSL設定を追加

 

ssl.confを編集

ssl.confで重要な項目は、「SSLCipherSuite」「SSLProtocol」です。

# vim /etc/httpd/conf.d/ssl.conf
Listen 443 https
  
SSLPassPhraseDialog exec:/usr/libexec/httpd-ssl-pass-dialog
SSLSessionCache         shmcb:/run/httpd/sslcache(512000)
SSLSessionCacheTimeout  300
SSLRandomSeed startup file:/dev/urandom  256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
  
<VirtualHost _default_:443>
  ErrorLog logs/ssl_error_log
  TransferLog logs/ssl_access_log
  LogLevel warn
  SSLEngine on
  SSLProtocol all -SSLv2 -SSLv3
  SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!EXP:!LOW:!aNULL:!eNULL:!ADH:!DSS:!MD5:!PSK:!SRP:!RC4:!3DES
  SSLHonorCipherOrder On
  Header add Strict-Transport-Security "max-age=315360000"
  
  #SSLCertificateFile /etc/pki/tls/certs/localhost.crt
  #SSLCertificateKeyFile /etc/pki/tls/private/localhost.key
  
  <Files ~ "\.(cgi|shtml|phtml|php3?)$">
     SSLOptions +StdEnvVars
  </Files>
  
  <Directory "/var/www/cgi-bin">
     SSLOptions +StdEnvVars
  </Directory>
  
  BrowserMatch "MSIE [2-5]" \
               nokeepalive ssl-unclean-shutdown \
               downgrade-1.0 force-response-1.0
  CustomLog logs/ssl_request_log \
            "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>

 

virtualhost.confを編集

virtualhost.confで重要な項目も「SSLCipherSuite」「SSLProtocol」です。それに加えて、証明書類を指定します。

# vim /etc/httpd/conf.d/virtualhost.conf
<VirtualHost *:443>
ServerName ssl.sabakan.red
DocumentRoot /var/www/wordpress

SSLEngine on
SSLProtocol all -SSLv2 -SSLv3
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:RSA+AESGCM:RSA+AES:!EXP:!LOW:!aNULL:!eNULL:!ADH:!DSS:!MD5:!PSK:!SRP:!RC4:!3DES
SSLHonorCipherOrder On
Header add Strict-Transport-Security "max-age=315360000"
  
SSLCertificateFile /etc/letsencrypt/live/ssl.sabakan.red/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/ssl.sabakan.red/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/ssl.sabakan.red/chain.pem
</VirtualHost>

 

ssl.confとvirtualhost.confの設定を終えたら構文チェックを行ってhttpdを再起動します。

# httpd -t
Syntax OK
# systemctl reload httpd

※httpdが起動している場合は、リロードで設定繁栄可能です。

 

 

3.SSLチェッカーで証明書の分析

 

証明書の分析

SSLチェッカーで分析してみます。SSLチェッカーのURLは以下です。

SSL Server Test (Powered by Qualys SSL Labs)

 

私の分析結果は、「A+」でした。

f:id:sabakan1204:20160109025707j:plain

 

 

以上、終わり