SSL証明書の入手
Let’s Encryptは無料で証明書が得られるSSL認証局です。但し有効期限が90日ですので、期限前に更新の処理を行う必要が有ります。期限前に登録したメールにお知らせが来るので、更新手続きを行い、更に90日の有効期限の延長が出来ます。Linuxですと更新をCronに登録しておくと自動で更新されますので手間が掛かりません。
Let’s EncryptからSSL証明書を取得する
Let’s Encryptでデジタル証明書を取得する方法です。CentOS7で、Apacheがインストールされ、firewallで、80番ポートを開放しておきましょう。なお、サイトを自己署名によるSSLサイトの状態にしておくと、以下の作業により、新しいSSL証明書の場所をApacheの設定ファイルに反映する事で、スムーズに自己証明から認証局の証明に変更が出来ます。
Let’s Encryptで認証を得るにはCertbotというソフトをインストールして発行の手続きを行います。Let’s Encrypt で発行される証明書は、Let’s Encrypt サーバーが、発行する証明書の対象のドメインの所有者自身が、発行要求をしてきたことを確認した上で、SSL/TLSサーバー証明書を発行します。
証明書の発行を要求された Let’s Encrypt サーバーは、発行しようとしている証明書のドメインの80番ポートにアクセスし、特定の内容のファイルが存在していることを確認します。 問題なくファイルが取得できればドメインの所有者が発行要求を出していることが確認できますので、これをもって証明書の発行を行うというわけです。
Certbot クライアントをインストールする
CentOS 7 用の Certbot クライアントは、EPELリポジトリからインストールすることができます。次のように epel リポジトリをインストールした上で、certbot と python-certbot-apache をインストールします。
# yum install epel-release # yum install certbot python-certbot-apache
SSL/TLS証明書の作成
次に Let’s Encrypt クライアントを実行して証明書を作成します。ドキュメントルートが /var/www/html に設定されている場合の手順です。
次のようにオプションを指定して certbot コマンドを実行します。 -d オプションには、証明書を発行するサーバーのドメインを、-w にはドキュメントルートのパスを指定します。
# certbot certonly --webroot -w /var/www/html/ -d east19-mikas.com
すると、まずは次のようにメールアドレスを入力するように求められます。 このメールアドレスは、後に証明書の有効期限が近づいた際にお知らせしてくれたりすることなどに利用されます。 有効なメールアドレスを入力します。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): メールアドレスを入力
次に規約に同意するかを問われます。 同意するために A と入力します。
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org
-------------------------------------------------------------------------------
Please read the Terms of Service at
https://letsencrypt.org-documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
-------------------------------------------------------------------------------
(A)gree/(C)ancel: A
次に Electronic Frontier Foundation にメールアドレスを共有するかを問われます。 メールアドレスを共有すると、 EFF や証明書のことなどについてのメールを送ると書かれています。 メーリングリストのようなものです。 メールを受け取りたければ Y を、受け取りたくなければ N と入力します。
-------------------------------------------------------------------------------
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 EFF and
our work to encrypt the web, protect its users and defend digital rights.
-------------------------------------------------------------------------------
(Y)es/(N)o: N
これで証明書の作成が開始されます。 正しく証明書の作成が行われた場合は、次のように出力されます。
Obtaining a new certificate Performing the following challenges: http-01 challenge for east-niship.mydns.jp Using the webroot path /var/www/html for all unmatched domains. Waiting for verification... Cleaning up challenges Generating key (2048 bits): /etc/letsencrypt/keys/0000_key-certbot.pem Creating CSR: /etc/letsencrypt/csr/0000_csr-certbot.pem IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/www.mywebsite.jp/fullchain.pem. Your cert will expire on 2017-07-16. 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" - 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
これにて証明書の発行は終了です。 作成されたサーバー証明書は、次のように /etc/letsencrypt/live/[発行したサーバーのドメイン]/ 内に作成されました。
# ls -l /etc/letsencrypt/live/east19-mikas.com/
total 4
-rw-r--r-- 1 root root 543 Apr 17 17:23 README
lrwxrwxrwx 1 root root 44 Apr 17 17:23 cert.pem -> ../../archive/east19-mikas.com/cert1.pem
lrwxrwxrwx 1 root root 45 Apr 17 17:23 chain.pem -> ../../archive/east19-mikas.com/chain1.pem
lrwxrwxrwx 1 root root 49 Apr 17 17:23 fullchain.pem -> ../../archive/east19-mikas.com/fullchain1.pem
lrwxrwxrwx 1 root root 47 Apr 17 17:23 privkey.pem -> ../../archive/east19-mikas.com/privkey1.pem
Apache 2.4 への設定
SSL/TLSサーバー証明書が作成できましたので、Apache 2.4 に設定を追加します。 ssl.conf の SSLCertificateFile SSLCertificateKeyFile SSLCertificateChainFile にそれぞれ設定します。
[/etc/httpd/conf.d/ssl.conf]
... SSLCertificateFile /etc/letsencrypt/live/[サーバーのドメイン]/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/[サーバーのドメイン]/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/[サーバーのドメイン]/chain.pem ...
これで Apache httpd を再起動して完了です。
# systemctl restart httpd
未だインターネットからのアクセスにはルーターの変更が必要です。とりあえず、サイト内部からサーバーにSSL接続出来るようにhostsファイルを設定しましょう。
この作業はサーバーではなく、クライアントPCでの作業です。WindowsでもLinuxでも同じで、hostsファイルにIPアドレスに続けて、ドメイン名を記述する必要があります。
$ sudo vi /etc/hosts 127.0.0.1 localhost 127.0.1.1 hirobe-Desktop # The following lines are desirable for IPv6 capable hosts ::1 ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters 192.168.21.210 east19-mikas.com
接続確認をします
クライアントPCで、ブラウザで、「https://east19-mikas.com/mput」のアドレスを入力し、アドレス欄に緑のマークが出て、サイトが表示されるか確認します。
SSL証明書の更新
更新出来るかテスト
次のコマンドを投げ、結果を確認します
# cd /usr/bin # certbot renew Saving debug log to /var/log/letsencrypt/letsencrypt.log - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Processing /etc/letsencrypt/renewal/east19-mikas.com.conf - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cert is due for renewal, auto-renewing... Plugins selected: Authenticator webroot, Installer None Starting new HTTPS connection (1): xxx-xxx.xxx.letsencrypt.org Renewing an existing certificate Performing the following challenges: http-01 challenge for east19-mikas.com Waiting for verification... Cleaning up challenges Resetting dropped connection: xxx-xxx.xxx.letsencrypt.org - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- new certificate deployed without reload, fullchain is /etc/letsencrypt/live/east19-mikas.com/fullchain.pem - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- Congratulations, all renewals succeeded. The following certs have been renewed: /etc/letsencrypt/live/east19-mikas.com/fullchain.pem (success) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -- 今回、手動更新をかけ、更新に成功しました。以前の掲載内容と異なります
未だ更新する必要が無いとのメッセージがでました。
SSLの自動更新
自動更新をCronで行う方法は現在検討中です。
参考サイトのリンクを貼っておきます