Let's Encrypt を利用して ravelll.org を HTTPS 化した
Amazon EC2 上で動かしている自身のポータルサイトを Let's Encrypt を利用して HTTPS 化したので手順をメモ。思った以上に簡単にできてびっくりした。
まず Let's Encrypt のクライアントを入手し、証明書を取得します。 Amazon Linux は公式にサポートされていないので実行には --debug フラグが必要です。 実行してしばらくすると term of conduct に従うか聞かれるので yes を選択。
wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto ./certbot-auto certonly --standalone -d ravelll.org --debug
次に暗号鍵を交換する際に使われる DH パラメータの設定ファイルを生成します。 鍵長は 2048 bit で。
sudo mkdir /etc/nginx/ssl cd /etc/nginx/ssl sudo openssl dhparam 2048 -out dhparam.pem
後は生成した証明書を利用したり脆弱な暗号化スイートやプロトコルを利用しないようにしたりすべく nginx.conf を編集します。 自身では以下のようにしました。
server { listen 80; listen [::]:80; return 301 https://$host$request_uri; } server { server_name 'ravelll.org'; listen 443 ssl http2; listen [::]:443 ssl http2; ssl_session_timeout 5m; ssl on; ssl_prefer_server_ciphers on; ssl_stapling on; ssl_stapling_verify on; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_certificate /etc/letsencrypt/live/ravelll.org/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/ravelll.org/privkey.pem; ssl_dhparam /etc/nginx/ssl/dhparam.pem; ssl_trusted_certificate /etc/letsencrypt/live/ravelll.org/fullchain.pem; resolver 8.8.8.8; ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!EXPORT:!DES:!3DES:!MD5:!DSS:!aNULL:!eNULL; add_header Strict-Transport-Security 'max-age=31536000; includeSubDomains;'; location / { root /var/www/; index index.html index.htm index.php; } }
nginx を再起動すると、正常に https 接続ができ、http ページへのアクセスが https ページにリダイレクトされることが確認できた。
QALYS SSL LABS の SSL 脆弱性テストをやってみると無事 A+、めでたい!
https://www.ssllabs.com/ssltest/analyze.html?d=ravelll.org