結構前からGoogleが本気でhttps化を促していて、気にはしていたものの結局放置していたのですが、気が向いたのでhttps化してみようと思います。
■環境
Apache2 – 2.4.25-3+deb9u5
DebianパッケージのApache2になります
■構築
1. Apache2のsslモジュールを有効化する
以下のコマンドを実行して、sslモジュールとsslのデフォルト設定を有効化します
# sslモジュール有効化 $ a2enmod ssl # sslサイトデフォルト設定有効化 $ a2ensite default-ssl # apache2再起動 $ systemctl restart apache2
コマンドを実行することによって、
mods-availableへのシンボリックリンクがmods-enabledに置かれ
sites-availableへのシンボリックリンクがsites-enabledに置かれることになります
手作業で普通にシンボリックリンクを作成しても良いと思います。
再起動も普通に /etc/init.d/apache2 restart としても良いです。
etc +apache2 |+conf-available |+conf-enabled |+mods-available ||+ssl.conf ||+ssl.load |+mods-enabled ||+ssl.conf ||+ssl.load |+sites-available ||+000-default.conf ||\default-ssl.conf |+sites-enabled ||+000-default.conf ||\default-ssl.conf |+apache2.conf |+apache2.conf.dpkg-dist |+envvars |+magic |\ports.conf
これだけでApache2は443ポートで待ち受けするようになりました。
$ ss -ltn | grep 443 LISTEN 0 128 :::443 :::*
※443ポートアクセスは80ポートとは別のVirtualHostとなるためDocumentRootの設定など揃える必要があります。
2. 証明書の設定
apache2のインストール時に最初から自己証明書が生成されており、
デフォルトのssl設定(default-ssl.conf)からも参照されているので、特に何もしなくても動きはします。
SSLCertificateFileとSSLCertificateKeyFileから参照してます
ssl用の公開鍵と秘密鍵は以下のディレクトリに既に存在しているはずです。
etc +ssl |+certs ||+ssl-cert-snakeoil.pem |+private ||\ssl-cert-snakeoil.key |\openssl.cnf
この段階ですでにhttpsアクセス出来ますが、認証されていないオレオレ証明書なので
CAサービスから認証済みの証明書を入手し、差し替える必要があります。
今回は無料のCAで有名そうな?letsencryptを使ってみます。
普通は結構高額な金額が掛かるらしいですが無料で使えるそうです。助かる。
https://letsencrypt.jp/
ユーザー登録など不要で、Certbotというソフトを入れるだけでいけます。
debianのbackportsパッケージにcertbotが入っていますので、aptからインストールします。
※backportsは標準ではsources.listに入っていないので追加が必要です。
# パッケージ管理システムからインストールします $ sudo apt install certbot python-certbot-apache # 証明書の入手とapacheへの適応を行います $ certbot --apache
–apacheオプションを付けたことにより、sites-availableディレクトリに “000-default-le-ssl.conf” シンボリックファイルが自動生成されていることが分ります。
そして、”000-default-le-ssl.conf” から/etc/letsencrypt/live/helloidea.org/(略) への証明書の参照があることも分ります。
また、/etc/cron.d/certbot に1日2回の証明書更新クローンが置かれるため、証明書のメンテナンスも不要の様です。
これで、https化完了です。
最後に既存のhttpリンクをhttpsにリダイレクトさせます
.htaccessの変更とプラグインで対応できます
# httpからhttpsへ強制リダイレクト RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
プラグイン: Really Simple SSL