自己証明書でWebサーバにHTTPSを実装してみます。
本記事は下記のような段階を踏みます。
①HTTPでページ閲覧
…Apacheをインストールしただけの状態
…HTTPアクセスは可能だがHTTPSアクセスは不可
②HTTP/HTTPSでページ閲覧
…mod_sslインストール+SSL設定(自己証明書)
…HTTP+HTTPS両方のアクセスが可能に
③HTTPSでのみページ閲覧
…リライト(転送)設定
…HTTPSでのみアクセスさせる
※サーバへの80+443ポート通信を許可するのを忘れずに
…Firewall、iptables、Security Group(AWS)など
①HTTPでページ閲覧
★ Apacheインストール
1 |
# yum -y install httpd |
★ Apache起動
1 |
# /etc/init.d/httpd start |
★ http://サーバIPへアクセス
Apacheのテストページが表示されます。
HTTPでアクセスできていますね。
★ https://サーバIPへアクセス
Apacheテストページが表示されません。
HTTPSではアクセスできていません。
ではHTTPS通信に必要な設定を行ってみましょう。
②HTTP/HTTPSでページ閲覧
▼HTTPS(SSL)通信に必要なもの
・SSLモジュール(mod_ssl)
・秘密鍵(SSLCertificateKeyFile)
・証明書(SSLCertificateFile)
※今回は秘密鍵と証明書(とCSR)を/etc/httpd/配下に生成します。
★ mod_sslインストール
1 |
# yum -y install mod_ssl |
★ 秘密鍵を生成する
1 |
# openssl genrsa -out /etc/httpd/server.key 2048 |
genrsa:秘密鍵を生成する
-out:生成するファイル名を指定する
2048:生成する鍵のビット数
★ CSR(証明書発行要求)を生成する
1 |
# openssl req -new -key /etc/httpd/server.key -out /etc/httpd/server.csr |
req:CSR管理オプション
-new:CSRを新規生成する
-key:CSR生成に使用する鍵ファイルを指定する
CSR生成にあたって何点か入力を求められます。
Common Name(サーバのホスト名)以外はオプションです。
1 2 3 4 5 6 7 8 9 10 |
Country Name (2 letter code) [XX]:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) [Default City]:Minato Organization Name (eg, company) [Default Company Ltd]:Skyarch Networks.Inc Organizational Unit Name (eg, section) []:Tech Common Name (eg, your name or your server's hostname) []:satoshun.com Email Address []:test@skyarch.net A challenge password []:password An optional company name []:None |
★ 証明書を生成する
1 |
# openssl x509 -req -days 3650 -in /etc/httpd/server.csr -signkey /etc/httpd/server.key -out /etc/httpd/server.crt |
x509:X.509証明書管理オプション
-days:証明書の期限を設定(10年)
-in:証明書生成で使用するCSRを指定
-signkey:証明書生成で使用する秘密鍵を指定
通常は認証局(=第三者)の秘密鍵を使用しますが、ここでは自身の秘密鍵を使用して証明書を生成しています。
この手法が自己証明書と呼ばれるゆえんです。
★ httpd.confにて証明書ファイルと鍵ファイルを指定
1 |
# vi /etc/httpd/conf/httpd.conf |
下記を追記します。
1 2 3 |
#SSL-Settinggs SSLCertificateFile "/etc/httpd/server.crt" SSLCertificateKeyFile "/etc/httpd/server.key" |
★ Apache再起動(設定反映)
1 |
# /etc/init.d/httpd restart |
★ http://サーバIPへアクセス
Apacheのテストページが表示されます。
HTTPは変わらずアクセスできています。
★ https://サーバIPへアクセス
下記のようなページが表示されます(Firefoxの場合)。
自己証明書を使用しているために起こるエラーです。
[エラー内容]→[例外を追加]→[セキュリティ例外を承認]とクリックして進みます。
するとApacheテストページが表示されます。
上記設定によりHTTPSアクセスが可能になりました!
しかし通信を暗号化したいページにHTTP(暗号化していない状態)でもアクセスできるというのは考えものです。
HTTPSでのみアクセスできるよう設定を追加してみます。
③HTTPSでのみページ閲覧
★ httpd.confにリライト(転送)設定を追記
1 |
# vi /etc/httpd/conf/httpd.conf |
下記を追記します。
1 2 3 4 |
#HTTP-to-HTTPS-Settings RewriteEngine On RewriteCond %{SERVER_PORT} 80 RewriteRule ^(.*)$ https://サーバIP/$1 [R,L] |
・「リライトを有効にして」
・「ポート80(http://サーバIP)へのアクセスを」
・「https://サーバIPへリライトする」
という設定です。
★ Apache再起動(設定反映)
1 |
# /etc/init.d/httpd restart |
★ http://サーバIPへアクセス
Apacheのテストページが表示されます。
しかしよく見るとURL欄が「https://~」に変わっています。
上記設定によりhttps://~へリライトされていますね。
★ https://サーバIPへアクセス
Apacheテストページが表示されます。
こちらは引き続きHTTPSアクセスが可能な状態です。
本記事の内容は以上です!
投稿者プロフィール
- 2015年8月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。