# HTTPS化 参考:[CentOS 7とApacheをインストールした環境にLet's EncryptでHTTPSを設定 - レムシステム エンジニアブログ](https://www.rem-system.com/cent-httpd-ssl/) ##### 前提 - ConohaVPS でCentOS を動作させている - Apache がインストール済み - グローバルIPアドレスが割り振られている - firewallにおいてhttpsの接続許可の設定済み - 割り当てるドメイン名を取得していること ##### ドメイン名の割り当て Conoha のコントールパネルにログインし、「DNS」画面を開く。 「+ドメイン」をクリックし、契約しているドメイン名を登録する。 登録後、下記のレコードを登録する。(※デフォルトで登録されているものはそのままにしておく) ^ タイプ ^ 名称 ^ TTL ^ 値 ^ | A(通常) | @ | 3600 | <グローバルIPアドレス> | | A(通常) | www | 3600 | <グローバルIPアドレス> | ##### hostコマンドによる正引きの確認 インターネットの繋がっているサーバから下記のコマンドを実行して、正引きできるかを確認する。 ``` $ host <ホスト名> <ホスト名> has address ``` ##### Apache httpd用SSL通信モジュールのインストール SSL通信用モジュールである**「mod_ssl」**のインストールを行う。 ``` $ sudo yum install mod_ssl ``` mod_ssl がApache のモジュールとして登録されたかどうかを下記コマンドで確認する。 ``` $ sudo httpd -M | grep ssl ssl_module (shared) ``` ##### Apache の再起動 ``` $ sudo systemctl restart httpd ``` ##### certbotパッケージのインストール サーバ証明書発行について、「Let's Encrypt」を利用する。 利用するために「certbot」という名前のパッケージをインストールする。 ``` $ sudo yum install epel-release (EPELレポジトリをインストールしていれば不要) $ sudo yum list installed | grep epel $ sudo yum install certbot python2-certbot-apache ``` certbotがインストールされているかを下記コマンドで確認する。 ``` $ which certbot /usr/bin/certbot ``` ##### サーバー証明書の作成 httpd に設定したドキュメントルート及び登録したドメイン名を使って、証明書を発行する。 ``` $ certbot certonly --webroot -w <ドキュメントルート> -d <ドメイン名> ``` コマンド実行すると、対話型のメッセージが表示されるので回答する。 回答後、「Congratulations!・・・」と表示されれば証明書の発行は完了 表示されたメッセージに証明書の保存場所が記載されている。(「/etc/letsencrypt/live/<ドメイン名>」) ファイルは4種類発行される。 - cert.pem: サーバ証明書の本体 - chain.pem: 中間証明書 - privkey.pem: 秘密鍵ファイル - fullchain.pem: サーバ証明書と中間証明書のセット ##### SSL通信用の設定 HTTPS通信の設定を変更するために、「ssl.conf」ファイルを行う。 ``` $ sudo cp /etc/httpd/conf.d/ssl.conf{,org} $ sudo vi /etc/httpd/conf.d/ssl.conf 下記を変更する SSLCertificateFile /etc/pki/tls/certs/localhost.crt ↓ SSLCertificateFile SSLCertificateKeyFile /etc/pki/tls/private/localhost.key ↓ SSLCertificateKeyFile SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt ↓ SSLCertificateChainFile ``` 編集後、下記コマンドを実行して設定ファイルが正常か確認する。 ``` $ sudo httpd -t Syntax OK ``` その後、httpdサービスを再起動する。 ``` $ sudo systemctl restart httpd ``` ##### HTTPS通信の動作確認 ブラウザにWebサーバのURLを入力してアクセスする。 Chrome の場合、URL欄の横に鍵マークが表示されていることを確認する。 ##### 更新コマンドの設定 発行した証明書は有効期限が90日と決まっている。そのため、1か月に1回程度、証明書を更新すればよい。 更新できるかどうかは、下記コマンドでシミュレーションできる。(「--dry-run」がオプション) ``` $ sudo certbot renew --dry-run ``` 定期的に実行できるように、crontab コマンドに追記する。 更新した場合は、httpdサービスを再起動する必要があるため、「--deploy-hook」オプションを指定する。 ``` $ sudo crontab -e 毎月1日と15日にコマンドを実行する場合の設定 00 3 1 * * certbot renew -q --deploy-hook "systemctl restart httpd" 00 3 15 * * certbot renew -q --deploy-hook "systemctl restart httpd" ``` 設定後、下記のコマンドで上記の設定が登録できているか確認する。 ``` $ sudo crontab -l ```