Let’s Encryptを使用してNginxにSSL接続を可能にする

Development
この記事は約11分で読めます。
  • 無料でSSL接続をしたい
  • NginxでLet’s Encryptを使いたい

前にCentOSにNginxをインストールする方法を書きましたが、今回はそのNginxのWebサーバーにSSL接続を可能にする方法です。

仕様するのは無料のSSL証明書Let’s Encryptです。

Let’s Encryptの設定方法を順を追って説明していきますので、Let’s EncryptでSSL対応をしたい人の参考になれば嬉しいです。

この記事でわかること
  • Let’s Encryptのインストールの仕方
  • SSL証明書の取得の方法
  • NginxでのSSL接続の設定
スポンサーリンク

Let’s Encryptインストール

前提条件

いろいろありますが、以下の条件をクリアしているのを前提として書きます。

  • 証明書を取得するドメインでサーバーアクセスが可能(DNSで名称解決が可能)
  • Nginxがインストール・起動済み
  • 80番ポートでサクセスが可能
  • gitがインストールされていてgitコマンドが使える

Nginxのインストール方法についてはこちらの記事を参照ください。

CentOS8にNginxを公式リポジトリからインストールする方法
VPSを借りたけどサーバーをWebサーバーを建てたいCentOS8にNginxをインストールしたいAppStreamリポジトリではなく公式リポジトリからインストールしたい最近サーバーを構築することがあったので、そのあたりを備忘...

certbotのインストール

まずはLet’s Encryptのクライアントツールのcertbotをインストールします。

インストール方法は任意の場所にgit cloneするだけです。

$ cd /usr/local 
$ git clone https://github.com/certbot/certbot

SSL証明書の取得

certbotを使った証明書の取得方法にはstandalone方式webroot方式があるんですが、今回はwebroot方式で行います。

webrootではNginxが起動していた、80番ポートでアクセスできる必要があります。

以下のコマンドを打つとメールアドレスの入力やらライセンスAgreeやら取得ドメインやら聞いてくるので逐一入力しましょう。

$ ./certbot/certbot-auto certonly --webroot -w /usr/share/nginx/html/ -d hirooooo-lab.com
  • ここでは取得ドメインは[hirooooo-lab.com]としておきます。
  • /usr/share/nginx/htmlはNginxのデフォルトのwebRootになります。
  • ./certbot/certbot-autoはcloneしたディレクトリのcertbot-autoが実行ファイルです

最終的なやり取りはこんな感じになりました。

./certbot/certbot-auto certonly certonly --webroot -w /usr/share/nginx/html/ -d hirooooo-lab.com
~~~
ここはズラーっとパッケージをダウンロードしてきてた
~~~
Complete!
Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel):                                                                                                     ←ここでメアド入力

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
404 Page not found - Let's Encrypt - Free SSL/TLS Certificates
Let's Encrypt is a free, automated, and open certificate authority brought to you by the nonprofit Internet Security Research Group (ISRG).
You must agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (A)gree/(C)ancel: A ←ここで規約確認 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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: N ←あんたのメールにいろいろ送っていいってことだと思う Obtaining a new certificate Performing the following challenges: http-01 challenge for api.research-ranger.com Using the webroot path /usr/share/nginx/html for all unmatched domains. Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/hirooooo-lab.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/hirooooo-lab.com/privkey.pem Your cert will expire on 2020-06-15. To obtain a new or tweaked version of this certificate in the future, simply run certbot-auto again. To non-interactively renew *all* of your certificates, run "certbot-auto renew" - Your account credentials have been saved in your Certbot configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Certbot so making regular backups of this folder is ideal. - 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

上記の例だと

Your cert will expire on 2020-06-15. To obtain a new or tweaked
version of this certificate in the future, simply run certbot-auto
again. To non-interactively renew all of your certificates, run
“certbot-auto renew”

とのことで、2020-06-15で期限切れるからそしたらcertbot-auto renewしてねって言ってますね。

とりあえずこれでSSL証明書の取得は完了です。

NginxのSSL接続設定

取得した証明書をNginxに設定してSSL接続を有効にします。

Nginxの設定ファイルを作成

/etc/nginx/conf.dserver.confファイルを作成します。

$ vi /etc/nginx/conf.d/server.conf

以下の内容をserver.confに入力してください。


# http redirect to https
server {
  listen 80;
  server_name hirooooo-lab.com;
  return 301 https://$host$request_uri;
}

server {
  listen 443 ssl;
  ssl_certificate     /etc/letsencrypt/live/hirooooo-lab.com/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/hirooooo-lab.com/privkey.pem;
  server_name hirooooo-lab.com;
  root /usr/share/nginx/html;
  index index.html;
}

http接続されてきたアクセスはhttpsへ301リダイレクトするようになってます。

これで最低限のSSL接続をする設定はできたので、Nginxをrestartすれば完了です。

Nginxのリスタート

$ sudo systemctl restart nginx

リスタートしてもダメな場合はリロードコマンドをやってみましょう。

$ sudo nginx -s reload

もしブラウザでの表示が接続が拒否される場合は、firewallでhttpsポートが塞がれている可能性があります。

その場合はfirewall-cmdでポートを開放しましょう。

ポートの開放の仕方は前回の記事にも書きましたので、今回は省略します。

https接続が完了

httpsでブラウザからドメインを表示してみましょう。

無事にnginxのページが表示されたらSSL化完了です。

Let’s EncryptでNginxをSSL接続のまとめ

今回はLet’s Encryptを使用してNginxにSSL接続ができるようにしてみました。

このままでは3ヶ月後にLet’s Encryptの証明書が切れてしまうので、定期的に手動更新するか、更新スクリプトをcronなどで自動化するのをオススメします。

証明書の更新についてはまた別の記事で書きたいと思います。

今は常時SSLが当たり前の世の中なので、Let’s EncryptでSSL対応をする人の参考になれば幸いです。

更新の記事はこちら

Let's EncryptのSSL証明書を更新する方法
以前Let's Encryptを使用してNginxにSSL接続を行う方法を書きましたが、Let's EncryptのSSL証明書は有効期限が3ヶ月で終了してしまいます。有効期限が切れる前にSSL証明書の更新が必要なのですが、今回は...

サーバー構築にオススメのVPS

気軽にサーバーを構築したい場合に、すぐに使えるConoha VPSがオススメです!

SSDの高速サーバーが初期費用無料で低価格でサーバーを持つことができます。

プランリニューアル&容量増量!【衝撃価格】月額620円のConoHa VPS【512MBプラン】

私も実際にConohaVPSを使ってますが、値段的にも機能的にもオススメできるVPSサービスです。

[jin_icon_book size=”18px” color=”#2c05f0″]オススメ本

ネットワークについての基礎知識がゼロから学べるオススメの教科書です!

コメント

タイトルとURLをコピーしました