ravelll の日記

よしなに

Let's Encrypt を利用して ravelll.org を HTTPS 化した

f:id:ravelll:20161124121117p:plain

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

References