LoginSignup
1
3

More than 5 years have passed since last update.

SSLの評価をA+なサーバーを運用してみた話

Last updated at Posted at 2017-11-30

アドベントカレンダーの初っ端ってことで、他の人と被らなそうなネタにしてみた。

大抵のページが常時SSLが当たり前になってますが、その分、SSLの設定も見直す必要です。
あるwebサービスを作ったときにせっかくだから、SSL Server TestでA+評価、HTTP/2に対応したオーバースペックなサーバーを構築したときの話です。

環境

conoha 1GBプラン
OS : CentOS7
webサーバー : Nginx

まずはhttpでアクセスできるようにする

最初は恒例のアップデートとNginxのインストール

sudo yum update
sudo yum install -y nginx

Nginxの起動と自動起動するように設定

sudo systemctl enable nginx
sudo systemctl start nginx

あと、ポート開放を忘れずに、

sudo firewall-cmd --zone=public --add-service=http --permanent
sudo firewall-cmd --zone=public --add-service=https --permanent
sudo firewall-cmd –reload

これでとりあえず、httpでアクセス出来るようになったはず

スクリーンショット 2017-11-30 21.20.21.png

httpsでアクセスできるようにする

とりあえず、letsencrypt公式に載ってるのをすべてインストールする

sudo yum install epel-release
sudo yum install certbot python-certbot-apache

証明書を取得する

sudo /usr/bin/certbot-auto certonly --webroot -w /usr/share/nginx/html --email info@hoge.com --debug -d example.com

不足パッケージがあった場合、自動でインストールしてくれるのでもう一度コマンドを実行したらいい

  • -d example.com がドメイン名
  • -w /usr/share/nginx/htmlが公開するルートディレクトリ
  • --email info@hoge.comがメールアドレス

は環境にあったものに書き換える。

きちんと実行できたら、 /etc/letsencrypt/live/example.com/に鍵が生成される。

次は、Nginxの設定を書く

〜略〜
  listen 443 ssl;
  ssl_certificate     /etc/letsencrypt/live/example.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
〜略〜

最低限の事だけ書いて
shell-session
sudo systemctl restart nginx

でNginxをリスタートするとhttpsでアクセスができるようになる

A+評価をもらうための設定

ssl_dhparam用にdhparam.pemを作る

sudo openssl dhparam -out /etc/nginx/ssl/dhparam.pem 2048

次は、Nginxの設定を書き換える


   listen 443 ssl http2;
   server_name example.com;
   root /usr/share/nginx/html;
   index index.php index.html index.htm;

   ssl_certificate         /etc/letsencrypt/live/example.com/fullchain.pem;       
   ssl_certificate_key     /etc/letsencrypt/live/example.com/privkey.pem;
   ssl_trusted_certificate /etc/letsencrypt/live/example.com/fullchain.pem;

   ssl_dhparam /etc/ssl/private/dhparam.pem;

      ssl_ciphers "ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128:AES256:AES:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK";
   ssl_prefer_server_ciphers  on;
      
   ssl_stapling on;
   ssl_stapling_verify on;
   resolver 8.8.4.4 8.8.8.8 valid=300s;
   resolver_timeout 10s;

   ssl_session_timeout 1d;
   ssl_session_cache shared:SSL:50m;


   add_header Strict-Transport-Security max-age=15768000;

設定を書き換えたあと、Nginxをリスタート

sudo systemctl restart nginx

これでSSL Server TestでA+評価の出るwebサーバーになったはず

1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3