以前下記の記事で、herokuでLet’s Encryptを使おうとしたのですが、結局使うことがありませんでした。
どこかで使おうか・・と考えていたのですが、よく考えるとこのブログ自体httpsでなかったんですよね・・・。
このご時世、httpはまずいなあ・・と思い、https化しました。
その時のメモを。
中間証明書と秘密鍵の作成
今回はLet’s Encryptで作成しましたので、先ほどのリンクを実行し、
1 2 3 |
サーバ証明証と中間CA証明書の結合 fullchain.pem 秘密鍵 privkey.pem |
をサーバーの任意の位置に配置すればOKです。
通常証明書などは業者から年数千円〜数万円で購入するのが一般的かと思います。
その場合、「SSLの設定に関して」を参考にしていただければと思います。
あるいは信頼度も低くていいのであればオレオレSSLという方法もあります。
モジュールセット+apache設定ファイル更新
証明書(正確にはサーバー証明書と中間証明書の合体)と秘密鍵をサーバーにおいたあとはapacheかnginxのファイルに書き込みをします。
今回このブログはapacheで動かしてますのでそちらの設定手順を。
ライブラリインストール
1 2 3 |
# yum -y install mod_ssl # httpd -M |grep ssl ssl_module (shared) |
設定ファイル
/etc/httpd/conf/httpd.conf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
### Section 3: Virtual Hosts # # VirtualHost: If you want to maintain multiple domains/hostnames on your # machine you can setup VirtualHost containers for them. Most configurations # use only name-based virtual hosts so the server doesn't need to worry about # IP addresses. This is indicated by the asterisks in the directives below. # # Please see the documentation at # <URL:http://httpd.apache.org/docs/2.2/vhosts/> # for further details before you try to setup virtual hosts. # # You may use the command line option '-S' to verify your virtual host # configuration. # # Use name-based virtual hosting. # NameVirtualHost *:80 NameVirtualHost *:443 |
上記の NameVirtualHost *:443 の部分を追加。これを書かないと個別のVirtualHostの設定が効きません。
/etc/http/conf.d/個別のvirtualhostの設定ファイル
1 2 3 4 5 6 7 8 9 10 11 |
<VirtualHost *:443> ServerName 通常のhttpと同様の設定 DocumentRoot 通常のhttpと同様の設定 SSLEngine on SSLCertificateFile 証明書結合のパス SSLCertificateKeyFile 秘密鍵のパス ErrorLog 通常のhttpと同様の設定 CustomLog 通常のhttpと同様の設定 </VirtualHost> |
上記設定を80番の下に追加します。
このあと、apache再起動すればOKです。
SSL でも VirtualHost (Apache2.2)
ポート開放
CentOS6ならiptables、CentOS7ならfirewallで443を開放します。
CentOS6の場合
1 2 3 |
vim /etc/sysconfig/iptables -A INPUT -p tcp -m tcp --dport 443 -j ACCEPT service iptables restart |
CentOS7
1 2 |
firewall-cmd --add-port=443/tcp --zone=public --permanent firewall-cmd --reload (これで設定を反映) |
起動したあとはこちらで443ポートが開放されているかを下記ツールで確認しましょう。
.htaccess修正
最後にhttpでアクセスした時に強制的にhttpsに飛ばすようにアプリ側にhtaccessを追加しましょう。
今回、WordPressだったので下記のように設定しました。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / #下記部分が追加です。 RewriteCond %{HTTPS} !on RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L] RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] |
追記
ちなみに画像やcss、jsにhttpのものが入っているとconsoleに下記のようにエラーメッセージがでて、httpsなのに、ブラウザの鍵マークが付与されません。
ありえる原因としてはコードの中に直でhttp://で書いている場所などがあるため、その部分を修正することにしましょう。