スマートフォンやhtml5+CSS3など新技術に四苦八苦。jQuery、AjaxなどJavaScriptも難しいですね。そんなWebに悩む人のネタ帳です。

複数ドメインに管理ツール「certbot」を使って無料SSL証明書「Let’s Encrypt」を適用させる方法

世の中は常時SSL化が進んでおりますが、自身で管理するwebサーバの複数ドメインに無料SSL証明書「Let’s Encrypt」を適用させてみました。

環境は以下の通りです。

  • CentOS7
  • Apache 2.4.6

今回は仮に「helog.jp」と、virtualhostで設定してある「sample.helog.jp」をSSL化してみます。

事前確認

前提としてApacheのモジュール「mod_ssl」が必要です。以下のコマンドでインストールされているかどうかを確認します。

# https -M

リストに「ssl_module (shared)」があれば問題なしですが、無い場合には以下のようにしてインストールします。

# yum -y install mod_ssl

また、ファイアウォール設定でhttps用の443番ポート通過が許可されている必要があるので、以下のコマンドで確認します。

# firewall-cmd --list-all
...
  services: ssh http https
...

項目「services」に「https」の記述があれば問題なしです。

certbotのインストール

Let’s Encrypt管理ツールcertbotをインストールします。

# yum install certbot python2-certbot-apache

この時、Apacheとの連携を前提にパッケージ「python2-certbot-apache」も合わせてインストールします。
これを入れておくと、証明書発行時にApacheの設定など一連を自動的に更新してくれるので、導入作業がだいぶ楽になります。

証明書の作成

それでは、実際にコマンド「certbot」を使って、SSL証明書を発行してみます。

# certbot --apache

ここから対話型になりますが、まず、「管理者メールアドレス」を入力します。

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator apache, Installer apache
Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): [管理者メールアドレス]
Starting new HTTPS connection (1): acme-v02.api.letsencrypt.org

規約に同意します。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
agree in order to register with the ACME server at
https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: A

管理者メールアドレスを「Let’s Encrypt」パートナーに公開しない「No」を選択します。

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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 our work
encrypting the web, EFF news, campaigns, and ways to support digital freedom.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o: No

https化するサイトを選択しますが、全サイト対象の場合は空のままで良いです。

Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: helog.jp
2: sample.helog.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):

全てのhttpへのアクセスをhttpsにリダイレクト「2」します。

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 2

以上で完了です。
ApacheのVirtualHost設定ファイル、例えば「vhost.conf」をみると、内容が更新されている事が分かります。また、それと合わせてファイル「vhost-le-ssl.conf」が追加されており、SSL証明書に関する設定が記述されています。

実際に「http://helog.jp」にアクセスすると「https://helog.jp」へとリダイレクトされ、SSL証明書が効いてることが確認できると思います。

証明書の更新

通常、SSL証明書には期限があり、「Let’s Encrypt」は90日です。有効期限は以下のコマンドで確認できます。

# certbot certificates
...
    Expiry Date: 2019-07-04 01:30:06+00:00 (VALID: 89 days)
...

残り89日であることが分かります。

証明書の更新は以下のコマンドで行うことができます。

# certbot renew

cronなどに登録しておけば、自動更新も可能です。

「–force-renew」オプションを使えば、残りの有効期限を無視して更新することが可能です。しかし、更新しすぎると「Let’s Encrypt」のレート制限に抵触する可能性があるので注意が必要です。
ちなみに「–dry-run」オプションを使えば実際には更新されない「テスト更新」を試すこともできます。

# certbot renew --force-renew --dry-run

昔は証明書の操作はだいぶ難しかったですが、これは簡単ですね~
近い将来「常時SSL化」が「デフォルトSSL」になるかもしれませんね。

B!

Comment

Comment Form

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください

Monthly Archives