このセクションでは、Let’s Encrypt の SSL証明書を使ったWebサイトのSSL化について紹介していきます。
今回作業は、OS が AlmaLinux で Webサービスが Nginx 、OpenSSL が既にインストールされている環境で実施しています。OpenSSL がインストールされていない場合には、別途インストールが必要となります。
必要なパッケージのインストール
EPEL レポジトリ をインストールします。
[user@pub-web ~]$ sudo dnf install epel-release
Last metadata expiration check: 2:41:44 ago on Mon Aug 14 07:38:59 2023.
Dependencies resolved.
================================================================================
Package Architecture Version Repository Size
================================================================================
Installing:
epel-release noarch 9-2.el9 extras 17 k
Transaction Summary
================================================================================
Install 1 Package
Total download size: 17 k
Installed size: 23 k
Is this ok [y/N]: y
ーー(省略)ーー
Installed:
epel-release-9-2.el9.noarch
Complete!
[user@pub-web ~]$
必要なパッケージをインストールします。 ここでは、Let’s Encrypt で SSL証明書を取得するのに必要なクライアントソフト certbot をインストールします。
[user@pub-web ~]$ sudo dnf install certbot python3-certbot-nginx
Extra Packages for Enterprise Linux 9 - x86_64 5.5 MB/s | 18 MB 00:03
Last metadata expiration check: 0:00:05 ago on Mon Aug 14 10:21:32 2023.
Dependencies resolved.
================================================================================
Package Arch Version Repository Size
================================================================================
Installing:
certbot noarch 2.6.0-1.el9 epel 18 k
python3-certbot-nginx noarch 2.6.0-1.el9 epel 156 k
Installing dependencies:
fontawesome-fonts noarch 1:4.7.0-13.el9 appstream 204 k
fonts-filesystem noarch 1:2.0.5-7.el9.1 baseos 9.0 k
python3-acme noarch 2.6.0-1.el9 epel 160 k
python3-certbot noarch 2.6.0-1.el9 epel 644 k
python3-cffi x86_64 1.14.5-5.el9 baseos 241 k
python3-chardet noarch 4.0.0-5.el9 baseos 209 k
python3-configargparse noarch 1.5.3-1.el9 epel 39 k
python3-configobj noarch 5.0.6-25.el9 appstream 62 k
python3-cryptography x86_64 36.0.1-2.el9 baseos 1.1 M
python3-distro noarch 1.5.0-7.el9 appstream 36 k
python3-idna noarch 2.10-7.el9 baseos 92 k
python3-josepy noarch 1.13.0-1.el9 epel 60 k
python3-parsedatetime noarch 2.6-5.el9 epel 79 k
python3-ply noarch 3.11-14.el9 baseos 103 k
python3-pyOpenSSL noarch 21.0.0-1.el9 epel 90 k
python3-pycparser noarch 2.20-6.el9 baseos 124 k
python3-pyparsing noarch 2.4.7-9.el9 baseos 149 k
python3-pyrfc3339 noarch 1.1-11.el9 epel 18 k
python3-pysocks noarch 1.7.1-12.el9 baseos 34 k
python3-pytz noarch 2021.1-4.el9 appstream 48 k
python3-requests noarch 2.25.1-7.el9_2 baseos 113 k
python3-setuptools noarch 53.0.0-12.el9 baseos 839 k
python3-urllib3 noarch 1.26.5-3.el9 baseos 188 k
Installing weak dependencies:
python-josepy-doc noarch 1.13.0-1.el9 epel 19 k
Transaction Summary
================================================================================
Install 26 Packages
Total download size: 4.8 M
Installed size: 21 M
Is this ok [y/N]: y
ーー(省略)ーー
Installed:
certbot-2.6.0-1.el9.noarch
fontawesome-fonts-1:4.7.0-13.el9.noarch
fonts-filesystem-1:2.0.5-7.el9.1.noarch
python-josepy-doc-1.13.0-1.el9.noarch
python3-acme-2.6.0-1.el9.noarch
python3-certbot-2.6.0-1.el9.noarch
python3-certbot-nginx-2.6.0-1.el9.noarch
python3-cffi-1.14.5-5.el9.x86_64
python3-chardet-4.0.0-5.el9.noarch
python3-configargparse-1.5.3-1.el9.noarch
python3-configobj-5.0.6-25.el9.noarch
python3-cryptography-36.0.1-2.el9.x86_64
python3-distro-1.5.0-7.el9.noarch
python3-idna-2.10-7.el9.noarch
python3-josepy-1.13.0-1.el9.noarch
python3-parsedatetime-2.6-5.el9.noarch
python3-ply-3.11-14.el9.noarch
python3-pyOpenSSL-21.0.0-1.el9.noarch
python3-pycparser-2.20-6.el9.noarch
python3-pyparsing-2.4.7-9.el9.noarch
python3-pyrfc3339-1.1-11.el9.noarch
python3-pysocks-1.7.1-12.el9.noarch
python3-pytz-2021.1-4.el9.noarch
python3-requests-2.25.1-7.el9_2.noarch
python3-setuptools-53.0.0-12.el9.noarch
python3-urllib3-1.26.5-3.el9.noarch
Complete!
[user@pub-web ~]$
SSL証明書の発行
certbot を使って、Let’s Encrypt で SSL証明書を発行していきます。まず最初に、自身のメールアドレスの入力を求められるので、メールアドレスを入力します。
[user@pub-web ~]$ sudo certbot --nginx
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): 自分のメールアドレスを入力
利用規約の同意を求められるので、Y で 同意します。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: Y
Let’s Encryptパートナーにメールアドレスを公開していいか聞かれるので、N とします(公開しても良ければ、Y)。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, 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
証明書を発行したいドメイン名が聞かれるので、自身のドメイン名を入力します。
正常であれば、ここで SSL証明書が自動的に発行されます。
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter 'c' to cancel): 証明書を発行したい自身のドメイン名を入力
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/(自身ドメイン名)/fullchain.pem
Key is saved at: /etc/letsencrypt/live/(自身ドメイン名)/privkey.pem
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for (自身ドメイン名) to /etc/nginx/conf.d/default.conf
Congratulations! You have successfully enabled HTTPS on https://(自身ドメイン名)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
以下は、Let’s Encrypt の実行環境です。Let’s Encrypt で発行されるSSL証明書などは このディレクトリ配下に作成されます。
options-ssl-nginx.conf は Nginx の SSLに関連する設定ファイルです。
ssl-dhparams.pem は Diffie-Helmanの鍵交換アルゴリズムで使われる素数を格納しているファイルです。
発行された SSL証明書に必要な実ファイルは archive ディレクトリに保存され、これまで発行されたSSL証明書の中で、最新のSSL証明書へのシンボリックリンクが live ディレクトリで作成されています。
[user@pub-web ~]$ sudo ls -la /etc/letsencrypt/
drwxr-xr-x. 7 root root 4096 Aug 20 02:42 .
drwxr-xr-x. 84 root root 8192 Aug 20 01:30 ..
-rw-r--r--. 1 root root 64 Aug 14 10:23 .updated-options-ssl-nginx-conf-digest.txt
-rw-r--r--. 1 root root 64 Aug 14 10:23 .updated-ssl-dhparams-pem-digest.txt
drwx------. 4 root root 86 Aug 14 10:41 accounts
drwx------. 3 root root 29 Aug 20 02:42 archive
-rw-r--r--. 1 root root 152 May 22 13:45 cli.ini
drwx------. 3 root root 43 Aug 20 02:42 live
-rw-r--r--. 1 root root 774 Aug 14 10:23 options-ssl-nginx.conf
drwxr-xr-x. 2 root root 34 Aug 20 02:42 renewal
drwxr-xr-x. 5 root root 43 Aug 14 10:23 renewal-hooks
-rw-r--r--. 1 root root 424 Aug 14 10:23 ssl-dhparams.pem
[user@pub-web ~]$
以下は、archive ディレクトリ内です。ここに実ファイルが格納されています。
[user@pub-web ~]$ sudo ls -la /etc/letsencrypt/archive/(証明書を発行したドメイン名)
total 20
drwxr-xr-x. 2 root root 83 Aug 20 02:42 .
drwx------. 3 root root 29 Aug 20 02:42 ..
-rw-r--r--. 1 root root 1493 Aug 20 02:42 cert1.pem
-rw-r--r--. 1 root root 3749 Aug 20 02:42 chain1.pem
-rw-r--r--. 1 root root 5242 Aug 20 02:42 fullchain1.pem
-rw-------. 1 root root 241 Aug 20 02:42 privkey1.pem
[user@pub-web ~]$
以下は、live ディレクトリ内です。ここに最新のSSL証明書へのシンボリックリンクが作成されています。証明書が更新される中で常に最新のSSL証明書を参照するように、Nginx では live ディレクトリのシンボリックリンクを参照する設定をします。
[user@pub-web ~]$ sudo ls -la /etc/letsencrypt/live/(証明書を発行したドメイン名)
total 4
drwxr-xr-x. 2 root root 93 Aug 20 02:42 .
drwx------. 3 root root 43 Aug 20 02:42 ..
-rw-r--r--. 1 root root 692 Aug 20 02:42 README
lrwxrwxrwx. 1 root root 39 Aug 20 02:42 cert.pem -> ../../archive/dorabenri.f5.si/cert1.pem
lrwxrwxrwx. 1 root root 40 Aug 20 02:42 chain.pem -> ../../archive/dorabenri.f5.si/chain1.pem
lrwxrwxrwx. 1 root root 44 Aug 20 02:42 fullchain.pem -> ../../archive/dorabenri.f5.si/fullchain1.pem
lrwxrwxrwx. 1 root root 42 Aug 20 02:42 privkey.pem -> ../../archive/dorabenri.f5.si/privkey1.pem
[user@pub-web ~]$
NginxでのSSL設定
server ディレクティブ で SSL に関わる設定を行います。ここでは、証明書公開鍵と秘密鍵はLet’s Encrypt の実行環境の liveディレクトリを参照しています。また、Let’s Encrypt の実行環境にある options-ssl-nginx.conf と ssl-dhparams.pem を参照しています。
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name (自ドメイン名);
ssl_certificate /etc/letsencrypt/live/(自ドメイン名)/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/(自ドメイン名)/privkey.pem;
#loading ssl settings in Let's Encrypt
include /etc/letsencrypt/options-ssl-nginx.conf;
#loading the Diffie-Helman key exchange algorithm in Let's Encrypt
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
ーー(省略)ーー
}
Nginx サービスを再起動し、正常であればこの時点でHTTPSでWebサイトが開きます。
[user@pub-web ~]$ sudo systemctl restart nginx
[user@pub-web ~]$