このブログに、Let’s EncryptのSSL/TLS証明書をインストールしてみましたので、その方法をシェアしておこうと思います。
まず、最初に断っておきますが、普通のレンタルサーバーを利用している場合には、この方法は使えません。前提として、サーバーのroot権限を持っている必要があります。もし言っている意味が分からないという場合は、root権限を持っていないでしょうから、残念ですが諦めてください。
(ちなみにこのブログは、さくらのVPSで運用していますので、root権限を持っています。うひひ)
これまでにいくつかのサーバーにインストールしましたが、慣れれば数分で設定できちゃいます。
SSL/TLS証明書といえば、これまでは年間数千円から数万円のコストを払う必要がありましたけど、無料で導入できれば気軽にいろんなサイトに導入出来ますので本当にありがたいですね。
それでは早速導入してみましょう!
Let’s Encryptのクライアントソフトウエアをインストールする
このページに書いてある手順で進めます。
まずはクライアントソフトウエアをサーバにインストールします。尚、このサーバーは、CentOS6で運用していますので、その条件で説明します。
マニュアルに沿って、必要なリポジトリを追加します。
$ sudo yum install epel-release
クライアントソフトをインストールするディレクトリに移動します。今回は「/usr/bin」にインストールすることにしました。
$ cd /usr/bin
クライアントソフトをダウンロードします。
$ sudo wget https://dl.eff.org/certbot-auto
ダウンロードしたファイルに実行権限を与えます。
$ sudo chmod a+x certbot-auto
クライアントを実行します。
$ sudo ./certbot-auto
クライアントを実行すると、クライアントの実行に必要な複数のパッケージがインストールされます。
インストールが完了すると、メールアドレスを尋ねられます。
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
素直に自分のメールアドレスを入力します。
使用許諾に同意を求められますので、「A」をタイプします。
Please read the Terms of Service atYou must agree in order to register with the ACME server at404 Page not found - Let's EncryptLet's Encrypt is a free, automated, and open certificate authority brought to you by the nonprofit Internet Security Res...(A)gree/(C)ancel:https://acme-v01.api.letsencrypt.org/directory
メールアドレスをシェアしても良いかと尋ねられるので、YかNお好きな方で。
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 EFF and our work to encrypt the web, protect its users and defend digital rights. (Y)es/(N)o:
このサーバーに設定されたドメインの中から、そのドメインのhttpsを有効にするか尋ねられます。
Which names would you like to activate HTTPS for? ------------------------------------------------------------------------------- 1: xxxxxxxxx.com 2: xxxxxxxx.com ------------------------------------------------------------------------------- Select the appropriate numbers separated by commas and/or spaces, or leave input blank to select all options shown (Enter 'c' to cancel):c Please specify --domains, or --installer that will help in domain names autodiscovery, or --cert-name for an existing certificate name.
一覧表示された中から、番号をコンマ区切りでタイプすれば自動的に証明書が取得されて、インストールまで行われるようですが、Apacheの設定ファイルを自動で書き換えられるのがちょっと怖いので、今回は手動で設定することにしました。なので、番号を入力せず「c」をタイプして自動設定を回避します。
SSL/TLS証明書を取得する
証明書を取得します。
$ ./certbot-auto certonly --webroot -w [ドキュメントルートのパス] -d [ドメイン名]
このブログの場合は、こんな感じです。
$ ./certbot-auto certonly --webroot -w /var/www/html/com.bagooon.blog -d blog.bagooon.com
以下のように表示されたら、無事に取得完了です。
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Let’s Encrypt は、有効期限が90日しかありませんので、自動的に証明書を更新されるようcronを設定します。
以下のコマンドが1日に1回実行されるように設定します。crontabやwebminなどお好きな方法でどうぞ。
/usr/bin/certbot-auto renew --renew-hook "apachectl restart"
このコマンドにより、取得済みの SSL/TLS サーバ証明書のうち、有効期限が近い証明書があれば自動的に更新が行われます。証明書が更新された場合は、Apacheも自動的に再起動されて新しい証明書が適用されます。
Apacheのバーチャルホストの設定を書き換える
続いて、Apacheのバーチャルホストの設定ファイルを編集します。https化するドメインのバーチャルホストの設定ファイルを開いて、<VirtualHost *:80>~<・VirtualHost>をコピーして、その下にペーストします。ペーストした設定部分を以下のように編集します。
ServerName blog.bagooon.com DocumentRoot /var/www/html/com.bagooon.blog ErrorLog logs/error_log CustomLog logs/access_log combined # ↓以下は複製した設定部分 # ポートを80から443に書き換える ServerName blog.bagooon.com DocumentRoot /var/www/html/com.bagooon.blog ErrorLog logs/error_log CustomLog logs/access_log combined # 以下の4行を書き加える SSLCertificateFile /etc/letsencrypt/live/blog.bagooon.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/blog.bagooon.com/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf SSLCertificateChainFile /etc/letsencrypt/live/blog.bagooon.com/chain.pem
保存したら、書式が間違っていないか確認します。
$ sudo apachectl configtest Syntax OK
Apacheを再起動して、SSL/TLSを有効にする
問題なければ、Apacheを再起動します。
$ sudo service httpd restart
httpsでアクセスして、無事に表示されたら完了です。Chromeだと、URLバーにこんな風に「保護された通信」と表示されます。
cssや外部スクリプト、画像のリンクなど、一つでも「http://~」でリンクされていると、保護された通信となりませんので修正が必要になります。wordpressなら、テンプレートにSimplicityを使えば、自動的に修正してくれる機能があるのでお勧めです。
保護された通信にならない場合、どのファイルが原因なのか調べる方法は、また後日に書こうと思います。
今日はこれで終わり!
ホームページの制作(デザイン・コーディング・プログラミング)に加え、ネットショップの販売促進に関するアドバイスも致します。 20年以上に渡って実際にネットショップを運営した経験を生かし、聞きかじりではない実績を伴ったノウハウを、自分の言葉でお伝えいたします。 プログラミングの経験は30年以上。HTML、CSS、JavaScript、TypeScript、Vue、NuxtJS、Node.js、MySQL、MongoDB、Elasticsearch、WordPress、PHP、Docker、Electronなど、幅広く対応します。
コメント
こちらの記事にお世話になりました。
VPSで運用しているサーバーで複数のドメインを設定すると443ポートが重複しています、先のものが優先されますとなり、1つしかSSL接続ができません。
何かヒントはありませんでしょうか。
そのような状態になったことがないので、よく分からないのですが、サーバーを複数インストールしてるとか?
それぞれのサーバーが443ポートを開こうとしてぶつかっているのかなと。
ごめんなさい、ちょっと分からないです。