SSLを構築するには「Let’s Encrypt」を使えば無料で手軽に構築できます。
私も「certbot」というツールを使って「Let’s Encrypt」によるSSLを構築してましたが、現在ではこの「certbot」にはsnap版と呼ばれるものに変更されているようなので、apacheによる導入手順をまとめました。
ApacheのSSLモジュールのインストール
ApacheのSSLモジュールが必要になります。
以下コマンドから、モジュールのインストールを確認できます。
httpd -M | grep ssl
インストールされていない場合はインストールします。
yum install mod_ssl
https(443番ポート)のファイアウォールを開ける
SSLはhttpsプロトコル、TCPの443番ポートを使うのでファイアウォールで通信許可を設定します。
firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload
snapdをインストールする
certbotをインストールするために、まずは「snapd」をインストールします。
yum install epel-release
yum install snapd
インストールしたらsnapdを起動するためsystemctlでsnapd.sockeをアクティベーションします。
systemctl enable --now snapd.socket
snapに対してシンボリックリンクを作成します。
ln -s /var/lib/snapd/snap /snap
snapdのコアをインストールする
以下のコマンドでsnapdのコアをインストールします。
snap install core
インストールしたら最新バージョンにリフレッシュします。
snap refresh core
certbotをインストールする
古いパッケージのcertbotを削除
旧版のcertbotを使っている場合は削除しておきます。
※パッケージ管理を使用してる場合はそれで削除[apt、dnf、yum]
rm -rf /usr/bin/certbot
snap版certbotをインストール
snapコマンドを使ってcertbotをインストールします。
snap install –classic certbot
インストールしたらsnapdと同様にcertbotのパスを通します。
ln -s /snap/bin/certbot /usr/bin/certbot
バージョン確認できればインストール完了です。
certbot --version
certbot でSSL証明書取得
certbotを使ってSSL証明書を取得してみます。
以下のコマンドを実行して、いくつかの質問に答えながら入力していきます。
certbot --apache
まずは登録するEメールアドレスを入力します。
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel):
利用規約に同意の上、ACMEサーバーへの登録を求められますので「Y」を入力します。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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. Do you agree?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(Y)es/(N)o:
ACME(Automated Certificate Management Environment の略)
ウェブサーバーと認証局との間の相互作用を自動化するための通信プロトコル
ACMEとは
Let’sEncryptプロジェクトに関する情報配信をメールに送るか尋ねられます。
「Y」か「N」を入力します。
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing, once your first certificate is successfully issued, 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:
HTTPSをアクティブにするドメインを聞かれます。
apacheに登録されているドメインか、サーバーのドメインが聞かれると思います。
通常は登録ドメインなので「1」を入力します。
Account registered.
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: **********.vs.sakura.ne.jp
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
以下のメッセージが届けば証明書の作成に成功です。
Requesting a certificate for example.com
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/example.com/fullchain.pem
Key is saved at: /etc/letsencrypt/live/example.com/privkey.pem
This certificate expires on 2022-03-13.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
Deploying certificate
Successfully deployed certificate for example.com to /etc/httpd/conf.d/vhost-le-ssl.conf
Congratulations! You have successfully enabled HTTPS on https://example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
「Let’s Encrypt」の証明書の有効期限は90日(約3ヶ月)です。
有効期限切れ前に証明書を更新しましょう。
証明書のインストール後は、ウェブサーバーにアクセス出来ない場合は、サービスを再起動しましょう。(systemctl restart httpd)
もし証明書のインストールが失敗するようなら、一旦ウェブサーバーを止めてから実施してみましょう。(systemctl stop httpd)