conoha VPS LEMP環境でのSSL設定方法

僕が暇な時にちょこちょこっと作ったサービス

大喜利屋

このサイトはconoha vps のLEMP環境で運用しているのですが、SSLの設定をしているときに、これはみなさんにも方法を共有した方がいいのかな?と思ったのでここで設定方法を解説させていただきます。

SSL証明書を取得する

今回はLet’s Encryptというサービスを利用してSSL証明書を取得していきます。

まずは証明書を取得するためにcartbot をインストールしていきます。

conohaのLEMPパッケージはCent OSなのでyumを使ってインストールします。

yum install certbot

インフトールが完了したら次の情報を準備しておいてください。

  • 登録するメールアドレス
  • SSL化したいドメイン
  • ドメインのルートディレクトリ

ではサクッとやっていきましょう!

まずはcartbotを走らせます

certbot certonly

対話形式で入力をしていくので、手順と質問の内容を解説させていただきます。

1 形式を選択する

How would you like to authenticate with the ACME CA?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Spin up a temporary webserver (standalone)
2: Place files in webroot directory (webroot)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 

この質問ではスタンドアロンウェブルートのどちらの形式を使用するのかを問われています。

ウェブルートで設定を行なっていくので2を選択してください!

2 メールアドレスを登録する

Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):

メールアドレスを登録してくれと言われているのでメールアドレスを入力しましょう。

3 利用規約に同意する

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel:

Agreeを選択して利用規約に同意してください。

4 サービスメールの設定

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let's Encrypt project and the non-profit
organization that develops Certbot? We'd like to send you email about our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:

メールを受け取りたい方はYes受け取りたくない方はNoを選択してください。

5 ドメインを入力する

Please enter in your domain name(s) (comma and/or space separated)  (Enter 'c'
to cancel): 

ドメイン名を入力するように言われているので先ほど用意しておいたSSL化したいドメイン名を入力してください。

複数のドメインを登録する際はカンマまたはスペースで区切るようにしてください!

6 ドキュメントルートを指定する

Renewing an existing certificate
Resetting dropped connection: acme-v02.api.letsencrypt.org
Performing the following challenges:
http-01 challenge for 入力したドメイン名
Input the webroot for 入力したドメイン名: (Enter 'c' to cancel): ^CCleaning up challenges

ステップ3ではSSL化したいドメインのドキュメントルートを入力するように言われています。

なので皆様の環境でのアプリケージョンの公開フォルダのパスを指定してあげてください。

7 取得した証明書の場所を忘れないようにメモする

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   パスが表示されます/fullchain.pem
   Your key file has been saved at:
   パスが表示されます/privkey.pem
   Your cert will expire on 2019-05-19. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

上記のような文章が表示されたらSSL証明書の取得が完了です!

この文章には証明書までのパスが表示されています。この後の工程で使用するので忘れないようにメモしておきましょう!

証明書のアップデートをCRONで自動化する

ここまででの工程でSSL証明書の取得ができたのですが、これで終わりではなくSSLの証明書には有効期限があり、定期的にアップデートする必要があります。

めんどくさい…と思った方もご安心ください。

cronという機能を使って更新を自動化することができます。

それではcronの設定を行なっていきましょう!

まずは下記のコマンドでcronの設定ファイルを編集します。

crontab -e

そこにこのコードを記入してください。コピペでも大丈夫です。

00 03 01 * * root /usr/bin/certbot renew && /usr/sbin/service openresty restart

これで自動化も完了です!

これで証明書の取得、管理の部分は終わりです。

nginxでhttpsを有効にする

次は nginxでSSL証明書を使用してhttpsの通信を行えるように設定していきましょう!

portの443番が空いていることを確認してください!

まずはnginxの設定ファイルを編集していきます。

conohaのLEMPテンプレートの場合nginxの設定ファイル

/usr/local/openresty/nginx/conf

にあります。

この中に nginx.confというファイルがあるのでこのファイルを編集していきます。

まずはバックアップを取っておきましょう

cp nginx.conf nginx.conf.back

nginx.confのバックアップが作成できたらvimを使って編集していきます。

今回はLaravelを使用する設定を記入していきます。

# HTTPS server
#
server {
  listen       443 ssl;
  server_name  ドメイン名;
  root   html/アプリケーション/public;

  ssl_certificate       /パス/fullchain.pem;
  ssl_certificate_key   /パス/privkey.pem;

  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;

  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;

  add_header X-Frame-Options "SAMEORIGIN";
  add_header X-XSS-Protection "1; mode=block";
  add_header X-Content-Type-Options "nosniff";

  index index.html index.htm index.php;

  charset utf-8;

  location / {
    try_files uri uri/ /index.php?query_string;
  }

  location = /favicon.ico { access_log off; log_not_found off; }
  location = /robots.txt  { access_log off; log_not_found off; }

  error_page 404 /index.php;

  location ~ \.php {
    fastcgi_pass unix:/run/php-fpm/www.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME realpath_rootfastcgi_script_name;
    include fastcgi_params;
  }

  location ~ /\.(?!well-known).* {
    deny all;
  }
}

上記のコードを追記してください。

これで nginxを再起動します。

conohaのLEMPテンプレートopenrestyを使用しているので、

service openresty restart

とする事で nginxを再起動することができます。

これでSSLの設定は完了です!

seo的にもセキュリティ的にもSSLは必須となってきていますので、忘れずに設定するようにしてください!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です