Let's Encryptで無料の暗号化鍵を発行しよう!
ここでは、無料で使える認証局、Let's Encryptを使った証明書の取得について掲載しています。
※CentOS 7のサポートは2024年6月をもって終了していますが、旧コンテンツとしてこちらのページは残しておきます。
Let's Encryptとは…?
通常、SSLでの認証に必要な証明書はデジサートやグローバルサインなどの認証局から発行される証明書と鍵を使い、通信の暗号化と発信者の信頼性を確保(実在証明)します。
しかし、この手続きには費用がかかります。
かと言って、自前の証明書と鍵では、通信の暗号化は可能ですが、実在証明をすることはできません。勝手に鍵を作って、「私は安全ですよ^^」と勝手に騒いでるだけ…って状態です。
なので、自前の証明書と鍵を使った場合、ブラウザでは以下のような警告が表示されます。
もちろんこのまま使用を続けることも可能ですが、初めてそのサイトを見た人は「え…大丈夫なの?」って思いますよね?でも、所詮自宅サーバ、費用はかけたくない…。
そこで登場するのがLet's Encrypt。Let's Encryptはネット通信の暗号化を広く普及させることを目的に2016年に始まったプロジェクトで、無料で使える認証局です。最近のブラウザなら上でご紹介したような警告が表示されることがありません。
ただし、無料なのはClass 1(ドメイン認証)に限ります。Class 1ではドメインの所有者のみの証明になります。信頼度という点では「自分で発行した証明書よりはマシ」程度に考えた方が良いでしょう。
業務で使う場合は有料のものを使った方が良さそうです。
詳しくは、Let's Encrypt 公式サイトをご覧ください。
Let's Encryptによる認証鍵の発行
前提条件として、以下を満たす必要があります。
- ・ドメイン名、ホスト名でサーバにアクセスできること
Webサーバ構築済みとして話が進みますが、Webサーバ等はこの時点では必要ありません。
[root@co7 ~]# yum -y --enablerepo=epel install python2-certbot-apache
インストール: python2-certbot-apache.noarch 0:1.11.0-1.el7 依存性関連をインストールしました: augeas-libs.x86_64 0:1.4.0-10.el7 certbot.noarch 0:1.11.0-2.el7 pyOpenSSL.x86_64 0:0.13.1-4.el7 python-augeas.noarch 0:0.5.0-2.el7 python-backports.x86_64 0:1.0-8.el7 python-backports-ssl_match_hostname.noarch 0:3.5.0.1-1.el7 python-cffi.x86_64 0:1.6.0-5.el7 python-chardet.noarch 0:2.2.1-3.el7 python-enum34.noarch 0:1.0.4-1.el7 python-idna.noarch 0:2.4-1.el7 python-ipaddress.noarch 0:1.0.16-2.el7 python-ndg_httpsclient.noarch 0:0.3.2-1.el7 python-pycparser.noarch 0:2.14-1.el7 python-requests.noarch 0:2.6.0-10.el7 python-requests-toolbelt.noarch 0:0.8.0-3.el7 python-setuptools.noarch 0:0.9.8-7.el7 python-six.noarch 0:1.9.0-2.el7 python-urllib3.noarch 0:1.10.2-7.el7 python-zope-component.noarch 1:4.1.0-5.el7 python-zope-event.noarch 0:4.0.3-2.el7 python-zope-interface.x86_64 0:4.0.5-4.el7 python2-acme.noarch 0:1.11.0-1.el7 python2-certbot.noarch 0:1.11.0-2.el7 python2-configargparse.noarch 0:0.11.0-2.el7 python2-cryptography.x86_64 0:1.7.2-2.el7 python2-distro.noarch 0:1.5.0-1.el7 python2-future.noarch 0:0.18.2-2.el7 python2-josepy.noarch 0:1.3.0-2.el7 python2-mock.noarch 0:1.0.1-10.el7 python2-parsedatetime.noarch 0:2.4-6.el7 python2-pyasn1.noarch 0:0.1.9-7.el7 python2-pyrfc3339.noarch 0:1.1-3.el7 python2-six.noarch 0:1.9.0-0.el7 pytz.noarch 0:2016.10-2.el7 完了しました!
[root@co7 ~]# cd
証明書の生成
Let's Encryptでは、certbot-autoというプログラムが初めから用意されていて、自動的に証明書の発行や更新を行ってくれます。
証明書にはドメイン名(mhserv.info)だけでなく、ホスト名(www.mhserv.infoなど)も複数登録可能なので、URLに使いたいものを登録しておきましょう。(ドメイン名は必須です)
尚、certbot-autoはWebサーバ機能を持っており、Apacheが動作していると競合してうまく動きません。動いている場合は一度止めておきます。
[root@co7 ~]# systemctl stop httpd
[root@co7 ~]# usr/local/certbot/certbot-auto certonly --standalone /
--agree-tos /
-d ドメイン名 /
-d ホスト名 /
-m 管理者のメールアドレス
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for mhserv.info
http-01 challenge for www.mhserv.info
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/mhserv.info/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/mhserv.info/privkey.pem
Your cert will expire on 2019-03-24. 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"
- 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-les
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
[root@co7 ~]# systemctl start httpd
ちなみに、途中の"n"は「暗号化技術に関しての情報をメールで送って良いかい?」の問いに対してのものです。欲しい場合は"y"と回答してください。
証明書の自動更新
Let's Encryptで発行された証明書の有効期限は3ヶ月です。期限が切れる前に更新作業が必要です。
スクリプトはさくらのVPS(Cent OS6.8)でLet's Encryptを自動更新する方法で紹介されていたものを使用しています。
[root@co7 ~]# vi /etc/cron.monthly/certbot-renew.sh
#
# Copyright (c) 2016 Katsuya SAITO
# 参考:http://qiita.com/childsview/items/e4bff3b32b8304553980
#
# @(#) letsencrypt_cert_autoupdate_webroot.sh ver.0.1.0 2016.01.31
#
#######################################################
# CONFIGURE SECTION ---#
CMD_PATH=/usr/local/certbot
LOG_FILE=/var/log/certbot/renew.log
CN="ドメイン名"
MAIL_TO="root"
systemctl stop httpd
today=`date +%F-%a-%T`
echo "# Let's Encrypt Cert AutoUpdate Start: $today" >$LOG_FILE
/usr/local/certbot/certbot-auto renew --force-renew >>$LOG_FILE
today=`date +%F-%a-%T`
echo "# Let's Encrypt Cert AutoUpdate End: $today" >>$LOG_FILE
cat -v $LOG_FILE | mail -s "[Let's Encrypt Auto Update] Update Report for $CN" $MAIL_TO
systemctl start httpd
exit 0
[root@co7 ~]# chmod +x /etc/cron.monthly/certbot-renew.sh
MyDNSを利用している方へ
Let's Encryptには、1週間当たりの発行数制限があります。これはドメインごとに管理されているため、自分以外の方がmydns.jpドメインで証明書を作成した場合もカウントされていきます。
発行数制限に引っかかると、以下のような表示が出ます。
An unexpected error occurred: There were too many requests of a given type :: Error creating new order :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/
MyDNSワイルドカード対応証明書発行スクリプトの設置
今回はワイルドカードを使った証明書を有志の方が公開しているので、それを使って簡単に取得したいと思います。
[root@co7 ~]# wget 'https://github.com/disco-v8/DirectEdit/archive/master.zip' -O DirectEdit-master.zip
--2024-07-07 22:53:03-- https://github.com/disco-v8/DirectEdit/archive/master.zip github.com (github.com) をDNSに問いあわせています... 20.27.177.113 github.com (github.com)|20.27.177.113|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 302 Found 場所: https://codeload.github.com/disco-v8/DirectEdit/zip/refs/heads/master [続 く] --2024-07-07 22:53:04-- https://codeload.github.com/disco-v8/DirectEdit/zip/refs/heads/master codeload.github.com (codeload.github.com) をDNSに問いあわせています... 20.27.177.114 codeload.github.com (codeload.github.com)|20.27.177.114|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 特定できません [application/zip] `DirectEdit-master.zip' に保存中 [ <=> ] 4,327 --.-K/s 時間 0s 2024-07-07 22:53:04 (43.7 MB/s) - `DirectEdit-master.zip' へ保存終了 [4327]
[root@co7 ~]# unzip DirectEdit-master.zip
Archive: DirectEdit-master.zip 50256b3e36a0974800bf6a17bfb8eafbb641e12c creating: DirectEdit-master/ inflating: DirectEdit-master/README.md inflating: DirectEdit-master/txtdelete.php inflating: DirectEdit-master/txtedit.conf inflating: DirectEdit-master/txtregist.php
[root@co7 ~]# rm -f DirectEdit-master.zip
[root@co7 ~]# mv DirectEdit-master /opt/
ワイルドカード対応証明書発行スクリプトの設定
設定ファイルにアカウントの情報を入力します。
[root@co7 ~]# cd /opt/DirectEdit-master
[root@co7 DirectEdit-master]# vi txtedit.conf
<?php $MYDNSJP_URL = 'https://www.mydns.jp/directedit.html'; $MYDNSJP_MASTERID = 'MyDNSのID'; $MYDNSJP_MASTERPWD = 'MyDNSのパスワード'; $MYDNSJP_DOMAIN = '取得したドメイン'; ?>
パーミッションの設定
スクリプトにパーミッションの設定を行います。
[root@co7 DirectEdit-master]# chown root:root ./
[root@co7 DirectEdit-master]# chmod 700 ./*.php
[root@co7 DirectEdit-master]# chmod 600 ./*.conf
証明書の取得
設定が終わったら、実際に証明書を発行してもらいましょう。
[root@co7 DirectEdit-master]# /usr/local/certbot/certbot-auto certonly --manual \
--preferred-challenges=dns \
--manual-auth-hook /opt/DirectEdit-master/txtregist.php \
--manual-cleanup-hook /opt/DirectEdit-master/txtdelete.php \
-d 取得したドメイン -d *.取得したドメイン \
--server https://acme-v02.api.letsencrypt.org/directory \
--agree-tos -m 管理者のメールアドレス \
--manual-public-ip-logging-ok
Saving debug log to /var/log/letsencrypt/letsencrypt.log Plugins selected: Authenticator manual, Installer None Obtaining a new certificate Performing the following challenges: dns-01 challenge for mhserv.mydns.jp dns-01 challenge for mhserv.mydns.jp Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/mhserv.mydns.jp/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/mhserv.mydns.jp/privkey.pem Your cert will expire on 2019-03-24. 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" - 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
参考にしたサイト様
Qiita - さくらのVPS(Cent OS6.8)でLet's Encryptを自動更新する方法
Qiita - 無料でHTTPS化できる「Let's Encrypt」をやってみた
Qiita - 突然GitHubとhttps通信できなくなったときの解決メモ
CPoint LAB. news - Let’s Encrypt + MyDNS でワイルドカードSSL証明書を自動更新する方法
今回新しく登場したコマンド
[広告]
トップページ
CentOS 7
○準備
○仮想化準備(VMware)
○仮想化準備(Hyper-V)
○仮想化準備(Proxmox)
○基本操作
○導入
○セキュリティ対策
○Dynamic DNS
○NTPサーバ
○データベース
○WEBサーバ
○FTPサーバ
○メールサーバ
○DNSサーバ
○ブログシステム
○オンラインストレージ
○その他