Let’s Encrypt という無料でサーバー証明書を発行してくれるサービスがあります。
(´-`).。oO(いい時代になったなぁー
サーバー証明書とは、インターネットであなた(クライアント)とサービス提供者(サーバー)との間の通信を秘密にする為に必要なものです。
ウェブで言うと、ウェブブラウザとウェブサーバー間で暗号通信を行う為に必要なものという事です。
サーバー証明書はサービス提供者(サーバー)側で暗号化通信のサービスを提供する為に必要になるものです。
ブログサイトを持っているという事は、ブログというサービスを提供する側になったという事です。(有用なサービスかはともかく…)
暗号化された安全な通信手段を提供するかどうかはサービス提供者側に責任があります。
とはいえ、これまではサーバー証明書を入手するには認証局(CA)業者から ”有償で” 発行してもらうしか手段がありませんでした。
個人で非営利目的のサーバーを運用している場合、これはなかなかハードルが高いものでした。
現実世界では多くの国で「通信の秘密」というのが重要とされ守られています。日本もそうです。
封書で私の恥ずかしい駄文を送っても、配送途中で封筒を開けられ誰かに読まれるという心配はありません。
現実世界では当たり前の様に考えられている事がインターネットではまだ実現出来ていません。これは由々しき事です
暗号化されていないデータは、ネットの通信経路の間で簡単に読まれてしまう危険性がある事をもっと認識すべきです。
Let’s Encryptが正式サービスを始めた事で、サーバー証明書入手のハードルは無くなりました。
サーバー運用者のみなさんは迷う事無くLet’s Encryptのサーバー証明書を入手し、暗号化された安全な通信を提供出来る様にしましょう!Let’s Encrypt!
- Let’s Encrypt – Free SSL/TLS Certificates
https://letsencrypt.org/
- Let’s Encrypt 総合ポータル
https://letsencrypt.jp/
↑サイト運営者が誰なのかいまいち良く解りませんが、日本語で情報提供を行っているサイトです。
さて、前置きが長くなりましたが、サーバー証明書入手とサーバー設定をやって行きましょう。
以下CentOS7の場合です。
Let’s Encryptクライアントソフトウェアのインストール
Let’s Encryptの利用に必要なソフトウェアはEPELリポジトリから取得可能です。
パッケージ名は「certbot」です。サクッとインストールしちゃいましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
[root@web7 ~]# yum --enablerepo=epel install certbot 読み込んだプラグイン:fastestmirror epel/x86_64/metalink | 4.0 kB 00:00 Loading mirror speeds from cached hostfile * base: ftp.yz.yamagata-u.ac.jp * epel: ftp.jaist.ac.jp * extras: ftp.yz.yamagata-u.ac.jp * updates: ftp.yz.yamagata-u.ac.jp 依存性の解決をしています --> トランザクションの確認を実行しています。 ---> パッケージ certbot.noarch 0:0.8.1-2.el7 を インストール --> 依存性解決を終了しました。 依存性を解決しました ================================================================================ Package アーキテクチャー バージョン リポジトリー 容量 ================================================================================ インストール中: certbot noarch 0.8.1-2.el7 epel 16 k トランザクションの要約 ================================================================================ インストール 1 パッケージ 総ダウンロード容量: 16 k インストール容量: 20 k Is this ok [y/d/N]: y Downloading packages: certbot-0.8.1-2.el7.noarch.rpm | 16 kB 00:00 Running transaction check Running transaction test Transaction test succeeded Running transaction インストール中 : certbot-0.8.1-2.el7.noarch 1/1 検証中 : certbot-0.8.1-2.el7.noarch 1/1 インストール: certbot.noarch 0:0.8.1-2.el7 完了しました! [root@web7 ~]# |
CentOS6では何やらいろいろとエラー対策が必要な様なのですが、CentOS7では特に何も無く簡単に使い始める事が出来ます。
取得するホスト名(FQDN)の決定
Let’s Encryptで取得できるサーバー証明書は「マルチドメイン」に対応しています。
正確には、x509 証明書のSubject Alternative Names(サブジェクト代替名)、いわゆるSANの機能に対応しています。
これによって、一つの証明書で複数のホスト(FQDN)に利用可能になります。
一般的な利用方法としては、www.hogehoge-k.com とホスト名を省略したドメインのみの hogehoge-k.com を一つにサーバー証明書にまとめてしまうという様な使い方になるでしょうか。
今回はこれらに加え blog.hogehoge-k.com も加えてみる事にしました。
- www.hogehoge-k.com
- hogehoge-k.com
- blog.hogehoge-k.com
以下このホスト名(FQDN)の場合です。
DNSの設定
申し込むホスト名(FQDN)であなたのサーバーのIPアドレス(グローバルアドレス)が正引き出来る様に設定しておいて下さい。
ドメイン使用権者の認証方法の決定
Let’s Encryptはサーバー証明書を発行する際(certbotコマンドを実行する際)に、申し込みのあったホスト名(FQDN)のサーバーが本当にあなたが所有しているものなのかどうかを確認します。
確認方法はいくつか選択出来ますが、今回は一番よく使われると思われる 「Standalone」 の方法で進めたいと思います。
Standaloneでの認証(ドメイン使用権者の認証)は、certbotコマンドが一時的にウェブサーバーになりLet’s Encryptのサーバーからアクセスを受け付ける事で行います。
この為、作業を行うサーバーはインターネットからポート80もしくは443でアクセス出来る環境にある事が必要になります。
また、ウェブサーバーを稼働中の場合はcertbotコマンドにポートを使わせる為に作業中は一時停止させる必要があります。
LAN内にあるマシンなどで作業する場合は、Standaloneでの認証はそのままでは行えません。「Manual」の方法であればどんな環境でも作業を行えると思いますので調べてみて下さい。
この場合でも一時的にPort Forwardで飛ばしてくれば、DMZやLAN内のマシンでもStandaloneで認証する事は出来るでしょう。私はこの方法で行いました。仕組みが解ればいろいろ策は打てると思います。
certbotコマンドの実行
管理者のメールアドレスを登録する必要があります。受信可能なあなたのメールアドレスを指定して下さい。
緊急の通知や、証明書の有効期限の通知、鍵を紛失したときの復旧時に使用されるそうです。
ここでは「webmaster@hogehoge-k.com」とします。
オプションの説明
- certonly
サーバ証明書の取得のみを行います。「のみ」と言うのは、他にもウェブサーバーの設定を自動で書いてくれる機能があるらしいのですが、これはちょっと怖いので試していません。 - –standalone
Standalone方式での認証を行います。 - –email メールアドレス
管理者のメールアドレスを指定します。 - –text
デフォルトはTUIのユーザーインターフェースですがTUIが嫌な人は付けましょう。重要では無いです。お好みで - -d ホスト名(FQDN)
マルチドメイン対応である為、証明書に含めたいホスト名(FQDN)をずらずらと必要な分だけ繰り返し書いていきます。
最初に記述したホスト名(FQDN)が証明書の Subject(発行先)コモンネーム(CN) になる様です。他はSubject Alternative Names(SAN)に登録されます。
指定する順番は気を付けた方が良さそうです。
では実行しましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
[root@web7 ~]# certbot certonly --standalone --email webmaster@hogehoge-k.com --text -d www.hogehoge-k.com -d hogehoge-k.com -d blog.hogehoge-k.com IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/www.hogehoge-k.com/fullchain.pem. Your cert will expire on 2017-01-12. 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" - 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 [root@web7 ~]# |
これで終わりかよー、簡単過ぎるーー
そうそう、重要な事を忘れてました。
Let’s Encryptが発行してくれるサーバー証明書の有効期限は3か月間です。
現在のところ1年や複数年など長い期間の証明書は得られません。期限切れに気を付けましょう。
証明書の確認
関係するファイルは /etc/letsencrypt/
下に作成されます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
[root@web7 ~]# tree /etc/letsencrypt/ /etc/letsencrypt/ |-- accounts | `-- acme-v01.api.letsencrypt.org | `-- directory |-- archive | `-- www.hogehoge-k.com | |-- cert1.pem | |-- chain1.pem | |-- fullchain1.pem | `-- privkey1.pem |-- csr | `-- 0000_csr-certbot.pem |-- keys | `-- 0000_key-certbot.pem |-- live | `-- www.hogehoge-k.com | |-- cert.pem -> ../../archive/www.hogehoge-k.com/cert1.pem | |-- chain.pem -> ../../archive/www.hogehoge-k.com/chain1.pem | |-- fullchain.pem -> ../../archive/www.hogehoge-k.com/fullchain1.pem | `-- privkey.pem -> ../../archive/www.hogehoge-k.com/privkey1.pem `-- renewal `-- www.hogehoge-k.com.conf |
サーバ証明書、中間証明書、サーバ証明書と中間証明書の結合ファイル、秘密鍵のファイル4つが /etc/letsencrypt/archive/ホスト名(FQDN)/
下に作成されます。
ファイル名に番号が付いていますが、証明書の更新を行う度に順番に生成されていくものと思われます。cert1.pem、cert2.pem、cert3.pemの様に。
また、/etc/letsencrypt/live/ホスト名(FQDN)/
下には実体を参照するシンボリックリンクが作成されます。これは更新の度に最新のファイルを参照する様に張りなおされると思いますので、ウェブサーバーの設定にはこれを指定しておくと便利です。
今回の場合では以下のパスをウェブサーバーに設定すればOKです。
- サーバ証明書(公開鍵)
/etc/letsencrypt/live/www.hogehoge-k.com/cert.pem - 中間証明書
/etc/letsencrypt/live/www.hogehoge-k.com/chain.pem - サーバ証明書と中間証明書の結合ファイル
/etc/letsencrypt/live/www.hogehoge-k.com/fullchain.pem - 秘密鍵
/etc/letsencrypt/live/www.hogehoge-k.com/privkey.pem
証明書の中身を確認しておきましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
[root@web7 ~]# openssl x509 -in /etc/letsencrypt/live/www.hogehoge-k.com/cert.pem -text -noout Certificate: Data: Version: 3 (0x2) Serial Number: 03:9d:cf:43:04:10:6f:fb:da:34:02:ca:7d:37:06:8c:0a:04 Signature Algorithm: sha256WithRSAEncryption Issuer: C=US, O=Let's Encrypt, CN=Let's Encrypt Authority X3 Validity Not Before: Oct 14 17:44:00 2016 GMT Not After : Jan 12 17:44:00 2017 GMT Subject: CN=www.hogehoge-k.com Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (2048 bit) Modulus: 00:cb:4a:38:d1:04:f5:fe:32:83:fd:00:2a:f3:63: 93:09:06:24:34:de:3b:68:57:ac:23:11:76:84:50: b8:f5:1d:09:bf:9d:c4:92:8a:31:d6:d4:00:fa:81: 24:b5:8b:25:a9:f7:48:10:4d:06:1f:3a:b1:11:33: 73:f7:30:a4:d4:60:73:77:41:e1:96:80:8e:2e:43: 90:e3:5d:73:1d:f4:00:f0:97:ae:1d:f5:e3:a2:23: f7:3e:f7:3b:ba:48:59:63:af:cc:bc:91:6f:09:90: 48:14:9e:f0:52:b4:5a:8d:01:d4:5c:5f:20:b8:0c: d1:c1:89:ec:ff:db:01:1c:49:b5:b6:c6:bf:ad:77: ff:23:c8:2b:27:b6:dd:af:29:ca:08:74:25:5c:83: b3:09:78:ec:67:32:a0:a0:00:d5:3d:cc:94:44:c3: 97:e2:ca:1f:1e:92:c5:3a:58:af:17:f1:fc:3c:ae: 25:aa:07:6e:00:8f:c2:0a:64:74:d9:6a:d5:cc:03: 47:cc:fe:07:c4:9d:96:b8:9d:49:df:22:cd:4d:9a: 4f:8a:ea:1a:13:9f:2a:4d:0d:92:71:b3:52:f4:8d: d2:f0:f9:b7:7c:b8:b3:c3:a2:90:6e:92:e9:f1:26: 17:08:79:9b:26:81:c5:8a:7f:cd:4b:40:64:b2:a7: 35:15 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Key Usage: critical Digital Signature, Key Encipherment X509v3 Extended Key Usage: TLS Web Server Authentication, TLS Web Client Authentication X509v3 Basic Constraints: critical CA:FALSE X509v3 Subject Key Identifier: 94:5A:9B:3D:1D:F8:0D:15:62:F7:D1:E1:34:D2:38:BC:68:8C:BB:11 X509v3 Authority Key Identifier: keyid:A8:4A:6A:63:04:7D:DD:BA:E6:D1:39:B7:A6:45:65:EF:F3:A8:EC:A1 Authority Information Access: OCSP - URI:http://ocsp.int-x3.letsencrypt.org/ CA Issuers - URI:http://cert.int-x3.letsencrypt.org/ X509v3 Subject Alternative Name: DNS:blog.hogehoge-k.com, DNS:hogehoge-k.com, DNS:www.hogehoge-k.com X509v3 Certificate Policies: Policy: 2.23.140.1.2.1 Policy: 1.3.6.1.4.1.44947.1.1.1 CPS: http://cps.letsencrypt.org User Notice: Explicit Text: This Certificate may only be relied upon by Relying Parties and only in accordance with the Certificate Policy found at https://letsencrypt.org/repository/ Signature Algorithm: sha256WithRSAEncryption 99:d1:9f:81:c9:df:9c:da:41:7a:3b:e7:ff:e8:d0:f5:24:f1: cb:7b:b2:44:00:97:34:42:2f:59:9f:3b:70:5c:03:0c:07:78: dd:df:16:81:4e:9f:88:2e:6d:cc:fc:c1:a8:22:a1:17:ad:55: 11:d9:dc:85:1f:3d:5b:b1:44:68:14:c3:30:cf:f7:96:5b:aa: ab:15:31:0a:a4:e5:7c:17:cd:3e:6c:b2:ab:d6:07:1f:61:9d: 1c:cd:df:28:8b:18:aa:ea:e2:35:14:7f:a4:c8:a9:49:bd:83: ac:bc:20:ff:21:77:da:d5:35:0b:5b:eb:66:1a:4a:a8:8f:48: 7c:4a:16:5c:98:ae:23:af:f3:97:c1:5b:2e:ed:ef:70:46:2d: 9a:54:5f:35:8b:e0:b3:fb:09:54:2d:b2:ca:cd:cb:29:47:b5: d0:8f:10:8e:a4:fd:4a:99:d4:97:73:ce:24:a4:de:96:dc:95: 87:d4:3f:96:e9:87:18:47:30:1b:65:f4:ea:b6:c3:fc:12:bf: 87:be:7d:66:81:1a:74:ee:35:f1:8d:ad:01:fe:d0:ed:4a:aa: df:00:51:d0:bb:7e:33:56:0c:9e:1f:d8:84:05:52:e0:29:6e: 28:5e:f4:49:eb:42:1c:e5:a5:68:4b:f5:35:c0:9a:89:f5:01: f6:1b:ed:cb [root@web7 ~]# |
SubjectのCN と X509v3 Subject Alternative Name の値を確認します。
指定したホスト名(FQDN)が登録されていればOKです。
CSRを用いたサーバー証明書の取得
自身で作成したプライベートキーを使いたい場合は、CSRを用いたサーバー証明書の取得も可能な様です。
「–csr」オプションについて調べてみて下さい。
試してみましたが、CSRに入力した情報、国名(C)/都道府県名(S/ST)/市町村名(L)/組織名(O)/組織単位名(OU) などの情報は一切サーバー証明書には含まれていませんでした。
特別な理由が無い限りは、プライベートキーの生成から何から全部お任せの今回の方法が便利で良いと思います。
Apacheの設定
CentOS6、Apache 2.2系の設定例です。(CentOS7じゃないよ)
名前ベースの仮想ホストの設定を行う場合。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# # hogehoge-k.com # <VirtualHost *:80> ServerName hogehoge-k.com ServerAdmin webmaster@hogehoge-k.com ErrorLog logs/www_hogehoge-k_com-error_log CustomLog logs/www_hogehoge-k_com-access_log combined Redirect permanent / https://hogehoge-k.com/ </VirtualHost> <VirtualHost *:443> ServerName hogehoge-k.com ServerAdmin webmaster@hogehoge-k.com DocumentRoot /var/www/hogehoge-k_com ErrorLog logs/www_hogehoge-k_com-error_log CustomLog logs/www_hogehoge-k_com-access_log combined SSLEngine on SSLCertificateFile /etc/letsencrypt/live/www.hogehoge-k.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.hogehoge-k.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/www.hogehoge-k.com/chain.pem <LocationMatch "^/wp-login\.php"> Order deny,allow Deny from all Allow from 10. </LocationMatch> </VirtualHost> <Directory "/var/www/hogehoge-k_com"> Options FollowSymLinks AllowOverride All Order allow,deny Allow from all </Directory> |
暗号化無しのhttp:(ポート80)でアクセスされた場合はhttps:(ポート443)にパーマネントでリダイレクトしてあげるのが良いでしょう。
こんな感じで当ブログのサーバー証明書の取得と設定も完了し、暗号化されたウェブサイトになりました。
ブラウザのURL欄に鍵マークが付いていると安心感が違いますよね。
サーバー証明書が無料で入手出来るとは、良い時代になったなぁーーーと思います。
みなさまも是非試してみて下さい。
4 Comments
はじめまして。
私のサイトもLet’s EmcryptでSSL化してます。CentOS6ですがw
ちなみに更新はcron任せで自動化できますよ。仮に毎日廻しても更新期限が先のものはSKIPしてくれるので楽チンです。
私はこんな感じにしてます。
0 4 20 * * service httpd stop ; /usr/bin/certbot-auto renew ; service httpd start
どうもー、はじめまして!
CentOS6ならまだまだ現役ですよー。我が家には5の現役サーバーがまだ居ますからw
3ヶ月毎の更新になりますから、やっぱり更新忘れが怖いですね。
私も何か対策を考えないといけないです。とりあえずGoogleカレンダーには登録しときました。(いいのかこんなんで…w
とりあえず、3ヶ月後の最初の更新時には手動で更新作業を行って、どんな作業になるのかまた記事にして紹介してみたいなと思っています。
その後で自動更新を始めてみたいと思います。
アドバイスありがとうございますー。また遊びに来てくださいね。
ではでは
私はやっと手元で管理しているCentOS5を全て移行完了したところです。来年3月でEOLですもんね……
あ、Let’s Encryptは更新まで20日切るくらいのタイミングでexpiry@letsencrypt.orgから通知メール来るから更新忘れる心配の方は大丈夫ですよw
私も5からの移管作業を急がなけりゃいけませんねー
いくつかお手製のプログラムが動いていて、一つ一つ移管先での動作確認を行わなくてはならず、面倒なので先送り先送りで今まで来てしまいました。
たぶん5から7だとすんなり動いてくれませんねーw 大変だw
Let’s Encryptのプロジェクトはしっかりしてるみたいですね。
この件に関しては私自身で経験した事をまた記事にしたいと思っています。