こんにちは
先日、サーバで使ってるサーバ証明書の年明けに期限(1年)が切れるので、今度は(SSL/TLS 証明書)を無料のLet’s Encryptと言う証明書(発行元?)に変更しました。
→ Let’s Encrypt 総合ポータル
今まで、1年で1000円から2000円程度支払ってきましたが、無料になるんですよね。地味に嬉しいです。
昨年もチャレンジしたんですが、テスト運用中との事もあり情報が少なくって途中で面倒になり、証明書を購入してしまったので、今年はリトライです。
サーバ証明書ってなに?と言う方も多いと思いますが、ブラウザのURLでhttps://から始まるヤツって言うと分かる方も多いんじゃないかと思います。
私も余り詳しくはありませんが、ブラウザ等の通信を通信途中で改ざんされたり、傍受されたりしない様にhttpsから始まるURLの場合には、暗号化されています。
また、同時に相手先のサーバが本当に取得したサーバ(ドメイン)と一致しているかの所在証明もしてくれます。
相手がなりすましでないかも証明してくれるんですよね。
少し細かい話をすると、ブラウザって自分が信じしている証明機関のリストを持っていて、その証明機関(子供も含む)にしか問い合わせしませんので、勝手に証明サーバを追加しても有効になりません。
確か、1,2年前に乗っ取られて不正な証明書を発行した海外の証明機関がありましたが、ブラウザの証明機関のリストから削除されてましたね。そこで証明書を買った人は涙目ですが。。こう言う対応をしてくれるから安心できますね。
自分への備忘録的に、記録を残します。
このサーバですが既にサーバ証明書は入っていまして、それを変更する形となります。
新規に入れる場合には、それぞれのアプリケーションでの設定が必要ですが、この記事では記載しません。
使っているプロトコルはhttps(Webサーバ)、smtps,pop3s,imaps(メール)のみです。
Webサーバはapache, メールサーバはqmail+doevcotです。(今時。。)
基本的に全てサーバにログインしてコマンドの実行のみとなります。
使ってるサーバのOSは、少し古いですがCentOS6.8になります。入れ替えたいけど面倒くさい(^^;
またこちらのサイト様の記事を参考にさせていただいてます。
→ Let’s Encryptを用いてさくらVPSをHTTPS対応させる
ちなみに必要なgitクライアントはインストール済みです。
以下は全てrootユーザで実行しています。
-- 色々アップデート yum update -- インストール先のディレクトリに移動 cd ~/ -- Let's Encryptの本体をリポジトリから取得 git clone https://github.com/letsencrypt/letsencrypt -- 取得したLet's Encryptのディレクトリに移動 cd ./letsencrypt -- ヘルプを表示(必要な物がインストールされる) ./letsencrypt-auto --help
エラーが出ました。(^^;
/root/.local/share/letsencrypt/lib/python2.6/site-packages/cryptography/__init__.py:26: DeprecationWarning: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of cryptography will drop support for Python 2.6
CentOS6.8のリポジトリではPython2.6までしかないのですが、2.7が必要なようです。
上記のサイトの内容に基づき、2.8をインストールします。
-- パッケージをインストール yum install centos-release-SCL yum install python27 phthon27-python-tools yum install dialog -- Python2.7を有効にする scl enable python27 bash
準備ができたので、サーバ証明書を発行してもらいます。
Webサーバのポートを使って認証する様なので、Webサーバを停止してやる必要があります。
これが面倒です。
-- Webサーバ(apache)を停止 service httpd stop -- サーバ証明書を発行 ./letsencrypt-auto certonly -a standalone -d secure.kingyo.info
画面にメアドの入力欄が出ますので、入力します。その後、ページを確認しろ的なメッセージも出ますが、<Agree>を選択します。
こんなメッセジが表示されて取得終了です。
Webサーバが止まってるのですぐに起動します。
-- Webサーバを起動 service httpd start
証明書は/etc/letsencryptに生成されます。
使用する証明書は以下のパスに出来るファイルです。(青字の箇所は取得したホスト名です)
/etc/letsencrypt/live/secure.kingyo.info
Webサーバに新しい証明書を設定します。
私の環境では以下のファイルです。
/etc/http.d/conf.d/ssl.conf
以下の内容を設定します。
SSLCertificateFile /etc/letsencrypt/live/secure.kingyo.info/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/secure.kingyo.info/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/secure.kingyo.info/chain.pem
webサーバの設定のチェックと再起動
-- 設定ファイルをチェック service httpd configtest → "Syntax OK"と表示されるのを確認 -- 再起動 service httpd restart
opensslコマンドで証明書を確認
-- ポート443(https)を確認
openssl s_client -connect secure.kingyo.info:443 -showcerts
先頭に以下の様な内容が出てLet's Encryptになっている事を確認
CONNECTED(00000003)
depth=2 O = Digital Signature Trust Co., CN = DST Root CA X3
verify return:1
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify return:1
depth=0 CN = secure.kingyo.info
verify return:1
これでWebサーバは終了。
qmailもやります。SSL化はtcpserverを使っているので、それを設定します。
tcpserverは中間証明書等を1ファイルに纏める必要があるので、結合します。
-- qmail用の証明書を作成 cat /etc/letsencrypt/live/secure.kingyo.info/privkey.pem > /etc/letsencrypt/live/secure.kingyo.info/qmail.pem cat /etc/letsencrypt/live/secure.kingyo.info/fullchain.pem >> /etc/letsencrypt/live/secure.kingyo.info/qmail.pem
起動スクリプトの証明書をここ作成した以下のファイルに差し替えて再起動します。
カスタマイズしてて参考になりづらいので割愛します。
/etc/letsencrypt/live/secure.kingyo.info/qmail.pem
また上に書いた様にopensslコマンドで確認します。smtpsポートは465です。
dovecotも設定します。dovecotはimap,imapsのために入れてあります。
/etc/dovecot/conf.d/10-ssl.confを以下の内容で設定します。
ssl_cert = </etc/letsencrypt/live/secure.kingyo.info/qmail.pem ssl_key = </etc/letsencrypt/live/secure.kingyo.info/privkey.pem
dovecotを再起動します。
また、opensslコマンドでimapsポートをチェックします。imapsのポート番号は993です。
ここまでで終わりですが、Let’s encryptは証明書の有効期間が90日と短いです。
一々手動で更新するのは面倒なので自動で更新する様に設定します。
更新スクリプトを作成します。
-- スクリプトを作成 cd ~/ vi update_letsencrypt.sh -- 実行権限付与 chmod u+x ./update_letsencrypt.sh -- ログフォルダを作成 mkdir /var/log/letsencrypt
内容を以下に記載します。
# # Copyright (c) 2016 Katsuya SAITO # # @(#) letsencrypt_cert_autoupdate_webroot.sh ver.0.1.0 2016.01.31 # update S.Ogata ver.0.1.1 2016.11.17 # ####################################################### # CONFIGURE SECTION ---# CMD_PATH=/root/letsencrypt LOG_FILE=/var/log/letsencrypt/renew.log CN="secure.kingyo.info" MAIL_TO="info@kingyo.info" today=`date +%F-%a-%T` echo "# Let's Encrypt Cert autopudate Start: $today" >$LOG_FILE /etc/init.d/httpd stop scl enable python27 "$CMD_PATH/certbot-auto certonly --standalone -d $CN --renew-by-default" >>$LOG_FILE /etc/init.d/httpd start today=`date +%F-%a-%T` echo "# Let's Encrypt Cert AutoUpdate End: $today" >>$LOG_FILE /bin/cat /etc/letsencrypt/live/secure.kingyo.info/privkey.pem > /etc/letsencrypt/live/secure.kingyo.info/qmail.pem /bin/cat /etc/letsencrypt/live/secure.kingyo.info/fullchain.pem >> /etc/letsencrypt/live/secure.kingyo.info/qmail.pem cat -v $LOG_FILE | mail -s "[Let's Encrypt Auto Update] Update Report for $CN" $MAIL_TO exit 0
毎月1日の朝3:00に自動アップデートの設定をします。
update_letsencrypt.shで設定したメールアドレスに更新した結果がメールされます。
-- cron設定 crontab -e --以下の内容を追加 # let's encrypt update 0 3 1 * * /root/update_letsencrypt.sh
ついでに更新されたかどうかもブラウザで見てみます。
FireFoxで検証します。他のブラウザでも似たような操作です。
ブラウザで、https://secure.kingyo.infoを表示します。(←SSL利用のドメインを変更したので現状使ってません)
表示されたページの中にマウスの右クリックします。
表示されるメニューから”ページの情報を表示”を選択します。
こんな画面が表示されるので、上にある鍵マーク(セキュリティ)を押します。
こんな画面が出て証明局が「Let’s Encrypt」になってる事がわかります。
「証明書を表示」を押すと証明書の詳細情報が表示されます。
こんな感じですね。有効期間は90日です。
詳細タブを選択すると更に詳細な情報が表示されます。
こんな感じです。
購入すると所有者の情報も記録(証明)されるのですが、簡易的に取得するので取得者の情報は取得ドメイン(ホスト名)しか無さそうです。
と言う感じで、サーバ証明書との購入(更新)作業から開放されました。
無料だし、感謝です。この手のサービスは個人向けにはあったんですが(初年度だけとかも。含めて)で、企業でもOKなのは初めてじゃないかと思います(確認してません。。)
将来的には全部のWebページをhttpsにしたい様ですね。
コメント
しげさん、こんにちは。
SSL証明書について、どうもよくわからないので、先日、安い証明書発行してもら行ったばかりです。
3年で(更新が面倒なので)、3,500円くらいでした。
な〜〜んだ、無料もあるのかぁ?
おっ!CentOS、うちのバージョンは?
なんて、最初の方読んでて思ってたら、うっわ、これは私では無理。
と、そもそも、自分のPCじゃなく、レンタルサーバーなんで、OS違うし、それ以前にroot権限なかったというオチ(笑)
最近、どんどん新しいことが頭に入っていかなくなって、世間から取り残されてく感が拭えない私です。orz
まぁ、しょうがないですね、素人だし、と思うことにします(^◇^;)
ShimaQさん
SSL証明書、3年で3500円だったら安いと思いますよ。
共用サーバでも(さくら?)入れられると言えば入れられそうです。
ただRoot権限が必要なので、自宅のLinuxサーバ等で発行してから管理画面から入れる必要がありそうです。
月1(最高で90日)で手作業は流石に面倒そうですよね。
最低限Webサーバを停止しないと発行できないので、無理そうです。
最近は、共用サーバでもこの証明書を利用できる所も増えてる様です。
そう言うサーバだと、すっごく簡単そうですね。
サーバ証明書なんて、普通の人は知っててもhttps!ってぐらいだと思いますので大丈夫ですよ。
そう言えば、SSL証明書って言うのは最近では語弊がありそうです(笑)
SSLに脆弱性が見つかってて、SSL自体を廃止してTLSに以降してます。
そろそろSSL(サーバ証明書)は殆ど無いと思います(^^;