#author("2019-12-02T14:00:58+00:00","default:wikiwriter","wikiwriter") #author("2020-02-10T04:35:16+00:00","default:wikiwriter","wikiwriter") &tag(Let's Encrypt); *目次 [#sde23eda] #contents *関連ページ [#y2636d23] *参考情報 [#q4781115] **CentOS 7 [#cee634c2] -[[Let’s Encrypt サーバー証明書の取得と自動更新設定メモ | あぱーブログ:https://blog.apar.jp/linux/3619/]] **CentOS 6 [#q22eaae3] -[[Let’s EncryptでSSLサーバー証明書を取得してみた – 稲葉サーバーデザイン:https://inaba-serverdesign.jp/blog/20151217/lets-encrypt.html]] -[[CentOS6 で Let's Encrypt #letsencrypt - @bayashi Diary:https://bayashi.net/diary/2015/1124]] -[[CentOS6でLet’s Encryptを使おうとするとpython2.7が入らずに詰まる | PCがあれば何でもできる!:https://blog.doizaki.com/entry/2016/02/07/152141]] -[[Let’s Encrypt(CentOS6)無料SSL証明書を発行する方法 | TILE-TECHNO:https://www.tile-techno.com/2016/01/26/letsencrypt/]] -[[CentOS6/RHEL6 で Let's Encrypt するとき python 2.7 は必須じゃないよ - pudding - diary(2016-08-30):http://moriya.xrea.jp/tdiary/20160830.html]] -[[CentOS6.xでLet'sEncryptするお話 - 妄想まとめ:http://kazu1130-h.hatenablog.jp/entry/2015/12/20/162719]] *概要 [#j8b6fe47] -無料でSSLサーバー証明書を取得できる。 -期間は90日間とかなり短いのでcronなどで自動更新する必要あり。 -取得ツールがPython 2.7を要求するので、CentOS 6の場合、Software Collections(SCL)をインストールするのが定番らしい。 *前準備(CentOS 6の場合) [#xc8f3f29] -Python 2.7が実行できるようにする # yum install centos-release-SCL # yum install python27 python27-python-tools *certbot-autoのインストール [#a275f010] -以前はletsencrypt-autoというスクリプトだったらしいが、certbot-autoというスクリプトに変更となっている。[[CentOSにLet's EncryptのSSL証明書を導入する - オープンソースこねこね:http://kohkimakimoto.hatenablog.com/entry/2016/09/15/180119]] -以下の手順で導入する。どっちにしろroot権限が必要なのでrootで作業したほうが間違えないかも。 # curl https://dl.eff.org/certbot-auto -o /usr/local/bin/certbot-auto # chmod a+x /usr/local/bin/certbot-auto # scl enable python27 bash #CentOS 6の場合 # /usr/local/bin/certbot-auto -sclコマンドは3つ引数をとり、上の場合新たなbashインスタンスを作成してその環境でPython27を使えるようにすることを意味している。最後の--helpコマンドの実行によりcertbotが必要なパッケージ類が自動でインストールされる。 *証明書の取得 [#h28f5be4] -certbot-auto certonlyで証明書の取得が可能。その後の--webrootは既存のWebサーバーを利用して証明書の確認を行うと言う意味。--webroot-pathはDocumentRootを指定する(--standaloneだと独自webサーバーが起動するけどその場合既存のWebサーバーを一事停止する必要がでてくる。 # certbot-auto certonly --webroot --webroot-path=/home/tanaka/www -d www.softantenna.com -実行前scl enable python27 bashを実行してPython 2.7が実行可能になっていることを確認。 -成功すると/etc/letsencrypt/live/www.softantenna.com以下に証明書が取得される。 ※--webroot-pathの意味:「Place files in a server’s webroot folder for authentication」ということで一連のプロセスを実行する際、ローカルに認証用ファイルを置く場所らしい。 *Apacheへの組み込み [#ib28f3c7] -この辺は普通のSSLサイトを構築する場合と同じ。ssl.confで以下のような設定を追加。 -httpd.conf NameVirtualHost *:80 NameVirtualHost *:443 -ssl.conf #pre{{ <VirtualHost *:443> ServerName www.softantenna.com DocumentRoot /home/tanaka/www SSLEngine on # 追加 SSLCertificateFile /etc/letsencrypt/live/www.softantenna.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.softantenna.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.softantenna.com/chain.pem <Directory /home/tanaka/www> # This relaxes Apache security settings. AllowOverride all # MultiViews must be turned off. Options -MultiViews </Directory> </VirtualHost> }} -うまくいかない場合、ssl.confに存在する既存のvirtualhost設定が悪いのかも。ServerNameなどをいじってみる。 *証明書の更新 [#re54c9d2] -certbot-auto renewで更新できる。 -cronで呼び出す必要があるのでシェルスクリプトを作成しておくと便利。[[Let's EncryptのSSL証明書を自動更新して、結果をメール通知するスクリプトを書いてみた(WEBROOT、NGINX用) - KITA Eng.:http://kitaeng.hateblo.jp/entry/2016/01/31/135554]]を参考し以下のようなスクリプトを/home/tanaka/bin/update_cert.shとして保存。 #pre{{ CERTBOT=/usr/local/bin/certbot-auto WEBROOT_PATH=/home/tanaka/www DOMAIN=www.softantenna.com EMAIL=admin@softantenna.com LOGFILE=/home/tanaka/bin/update_cert_log.txt today=`date +%F-%a-%T` echo "Let's Encrypt update start $today" >$LOGFILE scl enable python27 "$CERTBOT renew --force-renewal" >>$LOGFILE /etc/init.d/httpd restart today=`date +%F-%a-%T` echo "Let's Encrypt update end $today" >>$LOGFILE cat -v $LOGFILE | mail -s "[Let's Encrypt Auto Update] Update Report for $DOMAIN" $EMAIL }} -cronで一月に一回実行するように設定しておく。ここではrootではなくtanakaユーザーのcronとして設定する(sudoはパスワードなしで実行できるものとする)。 #pre{{ 10 1 1 * * sudo /home/tanaka/bin/update_cert.sh &> /home/tanaka/bin/update_cert_cron_log.txt }} *トラブルシューティング [#q59fb118] **SSLでアクセスしても安全な通信と表示されない [#q68dd881] -例えば画像ファイルをhttpで呼び出しているとmixed contentとみなされだめっぽい(chromeの場合)。 -Developer ToolでConsoleみれば確認可能。 **Let's Encrypt certificate expiration notice for domain [#u8c38309] -有効期限が切れそうにもないのに「Let's Encrypt certificate expiration notice for domain "ドメイン名"」というメールが届く。 -[[Let's Encrypt certificate expiration notice メールが来たら、証明書を更新しよう - 104blog:https://www.toyo104-memo.com/entry/lets-encrypt-mail]]にあるようにまれにある事象なのか?原因は不明。 *FAQ [#v92016b6] **certbotとcertbot-autoの違い [#z935976b] -certbot-autoがオリジナルで、certbotはCentOS(RHEL)のパッケージに含まれるコマンドか?