CentOS 6で無料SSL証明書Let’s Encrypt設定
無料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
既存のドメインで有料の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を実行するには管理者権限が必要となります。実行する際に管理者のパスワードを聞かれます。
certbot-autoが利用するパッケージのインストール
certbot-autoコマンドのバージョンを確認するためにcertbot-autoコマンドを実行するとcertbot-autoに依存関係のあるパッケージのインストールと更新作業が実行されます。実行には対話式で確認が行われるのでバージョンのオプションを付けて実行してもパッケージのインストールを行いたくない場合はキャンセルすることができます。
$ 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オプションではサブドメインを指定しています。
実行すると証明書の作成完了のメッセージが表示されます。証明書のファイルは/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
これでドメインの認証と証明書の作成は完了です。/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のサービスを忘れずに再起動する必要があります。再起動することで作成したファイル再読み込みが行われます。