CentOS7.1にnginx+php+openSSLでHTTP/2環境を構築してみた その②

前回の「CentOS7.1にnginx+php+openSSLでHTTP/2環境を構築してみた その①」に続きSSLの設定とHTTP/2の環境設定を書いていこうと思います
まずはHTTP/2に必須のSSL証明書を取得していきます
今回は動作テストなので無料のSSL証明書「Let’s Encrypt」で取得します
取得の詳しい方法は「Let’s Encryptの使い方」に載っています
見ながら行っているときにちょっとハマったことがあるので注意としてSSL証明書を取得する際に80番ポートと443番ポートを外部からアクセスできるようにしておかないといけません
iptablesで制限をかけている方は解除をしてから実行してください

# vi /etc/sysconfig/iptables
-A INPUT -p tcp -m state –state NEW -m tcp –dport 80 -j ACCEPT
-A INPUT -p tcp -m state –state NEW -m tcp –dport 443 -j ACCEPT

取得した証明書のファイルは「/etc/letsencrypt/live」に作成されます
SSL証明書の取得が完了したら前回作成したnginxの設定ファイルを変更します
まずは80番ポートの設定を書き換えます
ここでは301リダイレクトでhttpsへアクセスしに行くようにしています

# vi /etc/nginx/conf.d/ドメイン名.conf
server {
 listen 80;
 server_name ドメイン名;
 return 301 https://ドメイン名;
}

次にSSL通信を行うための設定を書いていきます

# vi /etc/nginx/conf.d/ドメイン名.conf
server {
 listen 443 ssl http2;
 server_name ドメイン名;
 root /var/www/html; ←ルートフォルダ
 index index.php index.html;

// サーバー証明書
 ssl_certificate /etc/letsencrypt/live/ドメイン名/fullchain.pem;
// 秘密鍵
 ssl_certificate_key /etc/letsencrypt/live/ドメイン名/privkey.pem;
// 通信プロトコルはTLSのみ
 ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
 ssl on;
// 暗号化スイート
 ssl_prefer_server_ciphers on;
 ssl_ciphers ECDHE+RSAGCM:ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:!EXPORT:!DES:!3DES:!MD5:!DSS;

 location ~\.php$ {
………………..
}
}

変更が完了したらnginxの再起動を行います

# systemctl restart nginx

再起動が完了したらブラウザからアクセスをしてみます
「http://ドメイン」でアクセスし「https://ドメイン」へ転送されれば成功です

※設定完了後にHTTP/2通信のチェックをするとChromeやFireFoxではHTTP1.1となっていました
調べてみると最新のChromeやFireFoxではALPN対応のOpenSSL1.0.2でないとHTTP/2とならないようです
CentOS7.1で標準パッケージに含まれているのはOpenSSL1.0.1なのでALPN対応していません
ALPN対応版の設定はまた後日紹介したいと思います

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です