SSL証明書(Web)は認証方法で分けると、DV(ドメイン認証)SSL、OV(組織認証)SSL、EV(拡張認証)SSLに分けられます。(他にWeb以外だと、文書署名用とかソフトウエア用などもあります)
OV SSLやEV SSLは書類提出など面倒な手続きがある上に無料どころかそれなりの料金が必要です。(その代わりに組織証明や世界標準の認証ガイドラインによる審査などが行われるためにDV SSLに比べて信頼性が高いといえます)
ただ、DV SSLであれば、StartCOM社のStartSSLやWoSignのWoSign Free SSL Certificatesなどの無料で取得できるSSL証明書があります。
無料で取得できるSSL証明書の中では、新参かつ少々毛色の異なるLet’s Encryptが正式版となったので、導入してみました。
環境
- CentOS 7.2(1511)
- Python 2.7
参考サイト
事前準備
1.gitのインストール
サーバーにgitがインストールされていない場合には、gitをインストールします。
[root@centos7 ~]# yum install git
Loaded plugins: fastestmirror, priorities, security
Setting up Install Process
Loading mirror speeds from cached hostfile
...
Complete!
2.クライアントのダウンロード
クライアントをインストールしたいディレクトリに移動して、gitでクライアントをダウンロードします。
[testuser@centos7 ~]$ git clone https://github.com/certbot/certbot
Cloning into 'certbot'...
remote: Counting objects: 35795, done.
remote: Compressing objects: 100% (92/92), done.
remote: Total 35795 (delta 58), reused 1 (delta 1), pack-reused 35702
Receiving objects: 100% (35795/35795), 9.65 MiB | 3.02 MiB/s, done.
Resolving deltas: 100% (25437/25437), done.
3.テスト実行(必要パッケージの自動インストール)
テスト実行することで、足りないパッケージが確認なしでインストールされます。
# クライアントをインストールしたディレクトリに移動します。
[testuser@centos7 ~]# cd certbot
# certbot-autoを実行します。
[testuser@centos7 certbot]$ ./certbot-auto
Bootstrapping dependencies for RedHat-based OSes...
yum is /usr/bin/yum
[sudo] password for testuser:
Loaded plugins: fastestmirror, priorities
Loading mirror speeds from cached hostfile
...
Complete!
Checking for new version...
Creating virtual environment...
Installing Python packages...
Installation succeeded.
▼以下の出力メッセージは、Apacheがインストールされていない環境になります。
Requesting root privileges to run certbot...
sudo CERTBOT_AUTO=./certbot-auto /home/testuser/.local/share/letsencrypt/bin/letsencrypt
No installers are available on your OS yet; try running "letsencrypt-auto certonly" to get a cert you can install manually
▼以下の出力画面は、Apacheがインストールされていても設定が認識されない場合になります。(Noを選択します)
▼以下の出力画面は、Apacheがインストールされていて設定が認識された場合になります。(Cancelを選択します)
証明書の取得
ここから先は使用するプラグインによって動作が異なります。
今回は、動作中のhttpdを停止させる必要のないwebrootプラグインを使用しました。
[testuser@centos7 certbot]$ ./certbot-auto certonly --webroot -w ドキュメントルートディレクトリ -d ドメイン名
上記コマンドを実行すると、以下のようにメールアドレスの入力を求められます。
※入力したメールアドレスは、証明書の有効期限通知や鍵の紛失時の復旧などに利用されるそうです。
メールアドレスを入力した後は、利用規約への同意を求められます。
問題なく進むと、以下のようなメッセージが出力されて、作業完了となります。
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/ドメイン名/fullchain.pem. Your cert
will expire on 有効期限. To obtain a new version of the
certificate in the future, simply run Certbot again.
- If you lose your account credentials, you can recover through
e-mails sent to 入力したメールアドレス
- 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/archive/に保存されます。
また、上記証明書等の実体ファイルにシンボリックリンクが下記の場所に作成されます。
- 証明書
/etc/letsencrypt/live/ドメイン名/cert.pem - 中間証明書
/etc/letsencrypt/live/ドメイン名/chain.pem - サーバ証明書と中間証明書が結合されたファイル
/etc/letsencrypt/live/ドメイン名/fullchain.pem - 秘密鍵
/etc/letsencrypt/live/ドメイン名/privkey.pem
※設定の際には、シンボリックリンクの方で設定しておけば、更新時のApache設定ファイルの書き換え作業を省くことが可能だそうです。
最後にApacheの設定ファイルにSSL関連の追記を行い、実際にサイトへアクセスして確認します。
まとめ
比較的簡単にSSL証明書を取得することができましたが、
root権限が必要なため、通常の共用レンタルサーバーでは導入できません。
root権限が取得できるVPSやクラウドサーバーが必要となりますので、共用レンタルサーバー付属の月額100円SSL証明書とかの方がトータル的にお得かもしれません。
また、有効期限が90日に限定されているため、90日毎に更新作業が必要です。(更新作業自体は、cronなどで自動化することも可能)
更にワイルドカード証明書では発行できず、発行できる枚数の制限もあるので、大量のサブドメインがある場合は向かないと思います。(細かいところですが、サイトシールもありません)
ただ、無料で発行できるというのは大きな利点です。
いままで、仕方がなくオレオレ証明書を使用していた場合などには、Let’s Encryptへ差替えてみるものアリかもしれません。
ちなみに、ネットオウル社運営のSSLBOXでは、Let’s Encryptの取扱を開始しているとのことです。(この場合、更新作業は完全に手作業になるんでしょうね・・・)