無料SSL証明書「Let’s Encrypt」をCentOS 6で利用するための手順を解説しています。「Let’s Encrypt」を利用するためには大きく分けて下記の4つの作業が必要となります。実機を使って実際に動作確認を行ったのでその時の手順です。

  • certbot-autoのインストール(ダウンロード)
  • certbot-autoが必要とする関連パッケージのインストール
  • certbot-autoコマンドにより認証と証明書の作成
  • apache Webサーバへの証明書の設定

今回実施したサーバcentOS 6ではすでに有料のSSLが導入済みでした。既存のドメインに新たにサブドメインの追加を行い、そのサブドメインに対してLet’s Encryptを利用してSSLを設定しました。

難しいのではないかという不安もありましたが、有料のSSLがすでに設定済みであったこともあり短時間でスムーズに作業は完了しました。その手順について公開しています。

環境の確認

実行したサーバの環境の確認を行っておきます。OSのバージョンとapacheのバージョンは下記の通りです。


$ more /etc/redhat-release 
CentOS release 6.6 (Final)
$ httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jun 19 2018 15:45:13

ネット上の文書ではcentOS 6ではpythonのバージョンを事前にアップデートする必要があると記述されていましたが、現バージョンのcertot-autoを利用するとpythonのバージョンアップの必要はありませんでした。別にpython3.6のパッケージがインストールされますがその後に既存のpython2.6.6が利用できなくなるわけではありません。


$ python -V
Python 2.6.6
certot-autoを利用することで実行したサーバの所有者であることの認証、証明書の作成までSSLを利用する上で必要となる設定をすべて行うことができます。
fukidashi

既存のドメインで有料のSSLが動作しているのでportの80、portの443はオープンしています。今回SSLを設定するサブドメインもhttp://blog.example.co.jpでアクセスが可能な状態で公開フォルダであるDocumentRottの/www/blog/public下においたindex.htmlファイルにアクセス可能です。またssl.confファイルにサブドメインの情報登録も完了しており、https://blog.exmple.co.jpでアクセスすると下記のエラーが表示されます。この状態から作業を進めていきます。

接続エラー
接続エラー

certbot-autoのダウンロード

wgetコマンドを利用してcertbot-autoをサーバにダウンロードします。サーバにダウンロードしたファイルは/usr/local/sbinに保存して実行できるようにファイルのパーミッションを変更しています。


$ wget https://dl.eff.org/certbot-auto
$ chmod a+x certbot-auto
$ sudo mv ./certbot-auto /usr/local/sbin/

certbot-autoを実行するには管理者権限が必要となります。実行する際に管理者のパスワードを聞かれます。

今回は/usr/local/sbinに保存しましたが、/usr/sbinなど任意の場所に保存してください。
fukidashi

certbot-autoが利用するパッケージのインストール

certbot-autoコマンドのバージョンを確認するためにcertbot-autoコマンドを実行するとcertbot-autoに依存関係のあるパッケージのインストールと更新作業が実行されます。実行には対話式で確認が行われるのでバージョンのオプションを付けて実行してもパッケージのインストールを行いたくない場合はキャンセルすることができます。

certbot-autoコマンドを実行するとパッケージのインストールを行うことができますが、事前にhttpdサーバを停止しておいてください。停止していない場合はパッケージの途中でインストールが停止します(整理中と表示)されハングしたような状態になります。もしインストールが停止した場合はhttpdプロセスを強制的に停止すると停止しているインストールが再開します。
fukidashi

$ sudo certbot-auto --version

実行すると依存性のチェックが行われ、インストールと更新が必要なパッケージが表示されます。下記のようにpython36がインストールされることも確認できます。環境によってインストールするパッケージも更新を行うパッケージも変わります。


依存性を解決しました

===================================================================================================================================================================================
 パッケージ                                            アーキテクチャ                 バージョン                                      リポジトリー                            容量
===================================================================================================================================================================================
インストールしています:
 augeas-libs                                           x86_64                         1.0.0-10.el6                                    base                                   314 k
 libffi-devel                                          x86_64                         3.0.5-3.2.el6                                   base                                    18 k
 rh-python36-python                                    x86_64                         3.6.12-1.el6                                    centos-sclo-rh                          55 k
 rh-python36-python-devel                              x86_64                         3.6.12-1.el6                                    centos-sclo-rh                         919 k
 rh-python36-python-virtualenv                         noarch                         15.1.0-3.el6                                    centos-sclo-rh                         1.8 M
更新:
 ca-certificates                                       noarch                         2020.2.41-65.1.el6_10                           updates                                908 k
 mod_ssl                                               x86_64                         1:2.2.15-69.el6.centos                          base                                    99 k
 redhat-rpm-config                                     noarch                         9.0.3-51.el6.centos                             base                                    60 k
依存性関連でのインストールをします。:
 iso-codes                                             noarch                         3.16-2.el6                                      base                                   2.4 M
 rh-python36-python-libs                               x86_64                         3.6.12-1.el6                                    centos-sclo-rh                         7.5 M
 rh-python36-python-pip                                noarch                         9.0.1-5.el6                                     centos-sclo-rh                         1.6 M
 rh-python36-python-setuptools                         noarch                         36.5.0-1.el6                                    centos-sclo-rh                         584 k
 rh-python36-runtime                                   x86_64                         2.0-1.el6                                       centos-sclo-rh                         1.0 M
 scl-utils-build                                       x86_64                         20120927-29.el6_9                               base                                    17 k
 xml-common                                            noarch                         0.6.3-33.el6                                    base                                    18 k
依存性関連での更新をします。:
 httpd                                                 x86_64                         2.2.15-69.el6.centos                            base                                   836 k
 httpd-manual                                          noarch                         2.2.15-69.el6.centos                            base                                   793 k
 httpd-tools                                           x86_64                         2.2.15-69.el6.centos                            base                                    81 k

トランザクションの要約
===================================================================================================================================================================================
インストール        12 パッケージ
アップグレード       6 パッケージ

合計容量: 19 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:

インストールしていもいいか聞かれるのでYesを選択します。その後Warningが表示されましたがそのままYesでインストールを継続しました。インストールが完了すると下記のようにcertbot 1.9.0がインストールされたことが確認できます。


 ・
 ・
 ・
完了しました!
Creating virtual environment...
Installing Python packages...
Installation succeeded.
certbot 1.9.0

証明書の作成

certbot-autoを利用するためにパッケージのインストールが完了すると証明書の作成を行います。下記のコマンドを実行すると証明書の作成が行われます。証明書が作成されるだけでなにか既存のファイル(httpd.conf or ssl.conf)が更新されるということはありません。


$ sudo certbot-auto certonly --non-interactive --agree-tos --webroot -w /www/blog/public -d blog.example.co.jp --email john@example.co.jp

-wオプションではサブドメインの公開ディレクトリを設定しています。このディレクトリはhttp://blog.example.co.jpでブラウザからアクセスできるディレクトリを指定しています。-dオプションではサブドメインを指定しています。

-w, -dオプションで指定した値は各環境で設定を行ってください。ここではexample.co.jpというドメインにblogというサブドメインを追加しています。メールアドレスも設定していますが、このコマンドを実行後に設定したメールアドレス宛に何かメールが送信されてくることはありませんでした。
fukidashi

実行すると証明書の作成完了のメッセージが表示されます。証明書のファイルは/etc/letsencrypt/live/blog.example.co.jp/の下に保存され、3カ月後の2021-02-19に有効期限が切れることがわかります。


Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for blog.example.co.jp
Using the webroot path /www/blog/public for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/blog.example.co.jp/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/blog.example.co.jp/privkey.pem
   Your cert will expire on 2021-02-19. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot-auto
   again. To non-interactively renew *all* of your certificates, run
   "certbot-auto renew"
 - 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
無料で利用することができますが、非営利団体のInternet Security Research Groupが寄付で運営しているのでDonating to ISRG、EFFと表示されいます。実際にはサービスを運用するために無料というものはなく誰かの寄付で成り立っていることも理解しておく必要があります。
fukidashi

これでドメインの認証と証明書の作成は完了です。/etc/letsencrypt/live/blog.example.co.jpには下記の証明書ファイルが作成されます。


README  cert.pem  chain.pem  fullchain.pem  privkey.pem

ssl.confファイルへの証明書の設定

SSL.confファイルに追加したサブドメインのVirtualHostの設定の中で作成した証明書を設定します。


<VirtualHost *:443>
ServerName blog.exmaple.co.jp:443
DocumentRoot /www/blog/public

//中略

SSLCertificateFile /etc/letsencrypt/live/blog.example.co.jp/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/blog.example.co.jp/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/blog.example.co.jp/chain.pem
</VirtualHost>

ssl.confファイルの更新後、certbot-autoコマンドを実行する前に停止していいたhttpdサーバを起動することで証明書の設定が反映されます。

ブラウザでSSLを設定したサブドメインにアクセスしてい証明書を見ると下記のように証明書の情報が表示されます。

証明書の確認
証明書の確認

これでCentOS 6での無料SSL証明書Let’s Encrypt設定は完了です。

3カ月の期間が過ぎたら

3カ月経過すると証明書が無効となるためブラウザでアクセスするとこの接続ではプライバシーが保護されませんというメッセージがブラウザ上に表示されます。

経過した場合でも再度以下のコマンドを実行して証明書の再作成を行うとメッセージは表示されなくなります。


$ sudo certbot-auto certonly --non-interactive --agree-tos --webroot -w /www/blog/public -d blog.example.co.jp --email john@example.co.jp

コマンドを実行したら、httpdのサービスを忘れずに再起動する必要があります。再起動することで作成したファイル再読み込みが行われます。