nginx
CentOS
centos7
letsencrypt

[さくらVPS]CentOS7にLet's EncryptのSSL証明書を導入する

はじめに

さくらVPSを新しく借りたのでCentOS7 + nginxの環境で
Let's EncryptのSSL証明書を導入する。

環境

OS: CentOS Linux release 7.4
WebServer: nginx 1.13.9
DocumentRoot: /var/www/html
Domain: www.example.com

install

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

証明書の取得

# cd certbot
# ./certbot-auto -n certonly --webroot -w /var/www/html -d www.example.com -m example@example.com --agree-tos

optionについて

1 2 3
certonly サブコマンド SSL/TLS サーバ証明書の取得のみを行う。
-n (--noninteractive) 一般オプション クライアントソフトウェアの実行時に、ユーザーからの入力を一切求めない。
-m --email 一般オプション トラブルや証明書の期限が近いなどの連絡先のメールアドレスを指定する。
-w (--webroot-path) プラグイン関係のオプション ドキュメントルートのパスを指定する。
-d (--domain) 一般オプション SSL/TLS サーバ証明書の取得を申請するドメイン名を指定する。
--webroot プラグイン関係のオプション ドキュメントルート以下に認証用ファイルを生成する。
--agree-tos 自動化オプション Let's Encrypt の利用規約に同意する。

Nginx(ついでにhttp2)

ついでにhttp2も(listenに「http2」を追加)

/etc/nginx/conf.d/ssl.conf
server {
    listen 443 ssl http2;
    server_name www.example.com;
    ssl_certificate     /etc/letsencrypt/live/www.example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/www.example.com/privkey.pem;
    root /var/www/html;

    location / {
        index index.php index.html index.htm;
    }

    location = /50x.html {
        root /usr/share/nginx/html;
    }

    location ~ \.php$ {
        fastcgi_pass  unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include       fastcgi_params;
    }
}

Port(443)の解放

portを解放していなければ解放する

# firewall-cmd --add-service=https --permanent
# systemctl restart firewalld

証明書の更新

# ./certbot-auto renew --webroot -w /var/www/html

ちなみに証明書の有効期限が近くないと
「Cert not yet due for renewal」
このようなメッセージが出て更新できない。

参考

Let's Encrypt 総合ポータル
CentOS7でLet's Encryptを使う
Let's Encrypt で Nginx にSSLを設定する