自己証明書でHTTPS実装

自己証明書でWebサーバにHTTPSを実装してみます。
本記事は下記のような段階を踏みます。

①HTTPでページ閲覧
…Apacheをインストールしただけの状態
…HTTPアクセスは可能だがHTTPSアクセスは不可

②HTTP/HTTPSでページ閲覧
…mod_sslインストール+SSL設定(自己証明書)
…HTTP+HTTPS両方のアクセスが可能に

③HTTPSでのみページ閲覧
…リライト(転送)設定
…HTTPSでのみアクセスさせる

※サーバへの80+443ポート通信を許可するのを忘れずに
…Firewall、iptables、Security Group(AWS)など

①HTTPでページ閲覧

★ Apacheインストール

# yum -y install httpd

★ Apache起動

# /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インストール

# yum -y install mod_ssl

★ 秘密鍵を生成する

# openssl genrsa -out /etc/httpd/server.key 2048

genrsa:秘密鍵を生成する
-out:生成するファイル名を指定する
2048:生成する鍵のビット数

★ CSR(証明書発行要求)を生成する

# openssl req -new -key /etc/httpd/server.key -out /etc/httpd/server.csr

req:CSR管理オプション
-new:CSRを新規生成する
-key:CSR生成に使用する鍵ファイルを指定する

CSR生成にあたって何点か入力を求められます。
Common Name(サーバのホスト名)以外はオプションです。

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

★ 証明書を生成する

# 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にて証明書ファイルと鍵ファイルを指定

# vi /etc/httpd/conf/httpd.conf

下記を追記します。

#SSL-Settinggs
SSLCertificateFile "/etc/httpd/server.crt"
SSLCertificateKeyFile "/etc/httpd/server.key"

★ Apache再起動(設定反映)

# /etc/init.d/httpd restart

http://サーバIPへアクセス
Apacheのテストページが表示されます。
HTTPは変わらずアクセスできています。

https://サーバIPへアクセス
下記のようなページが表示されます(Firefoxの場合)。
自己証明書を使用しているために起こるエラーです。
安全ではない接続
[エラー内容]→[例外を追加]→[セキュリティ例外を承認]とクリックして進みます。
するとApacheテストページが表示されます。
上記設定によりHTTPSアクセスが可能になりました!

しかし通信を暗号化したいページにHTTP(暗号化していない状態)でもアクセスできるというのは考えものです。
HTTPSでのみアクセスできるよう設定を追加してみます。

③HTTPSでのみページ閲覧

★ httpd.confにリライト(転送)設定を追記

# vi /etc/httpd/conf/httpd.conf

下記を追記します。

#HTTP-to-HTTPS-Settings
RewriteEngine On
RewriteCond %{SERVER_PORT} 80
RewriteRule ^(.*)$ https://サーバIP/$1 [R,L]

・「リライトを有効にして」
・「ポート80(http://サーバIP)へのアクセスを」
・「https://サーバIPへリライトする」
という設定です。

★ Apache再起動(設定反映)

# /etc/init.d/httpd restart

http://サーバIPへアクセス
Apacheのテストページが表示されます。
しかしよく見るとURL欄が「https://~」に変わっています。
上記設定によりhttps://~へリライトされていますね。

https://サーバIPへアクセス
Apacheテストページが表示されます。
こちらは引き続きHTTPSアクセスが可能な状態です。

本記事の内容は以上です!

コメントを残す

メールアドレスが公開されることはありません。

Time limit is exhausted. Please reload CAPTCHA.