自己証明書で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インストール

★ Apache起動

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

https://サーバIPへアクセス
Apacheテストページが表示されません。
HTTPSではアクセスできていません。

ではHTTPS通信に必要な設定を行ってみましょう。

②HTTP/HTTPSでページ閲覧

▼HTTPS(SSL)通信に必要なもの
・SSLモジュール(mod_ssl)
・秘密鍵(SSLCertificateKeyFile)
・証明書(SSLCertificateFile)

※今回は秘密鍵と証明書(とCSR)を/etc/httpd/配下に生成します。

★ mod_sslインストール

★ 秘密鍵を生成する

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

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

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

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

★ 証明書を生成する

x509:X.509証明書管理オプション
-days:証明書の期限を設定(10年)
-in:証明書生成で使用するCSRを指定
-signkey:証明書生成で使用する秘密鍵を指定

通常は認証局(=第三者)の秘密鍵を使用しますが、ここでは自身の秘密鍵を使用して証明書を生成しています。
この手法が自己証明書と呼ばれるゆえんです。

★ httpd.confにて証明書ファイルと鍵ファイルを指定

下記を追記します。

★ Apache再起動(設定反映)

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

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

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

③HTTPSでのみページ閲覧

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

下記を追記します。

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

★ Apache再起動(設定反映)

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

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

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

投稿者プロフィール

sato
2015年8月入社。弊社はインフラ屋ですが、アプリも作ってみたいです。

コメントを残す

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

CAPTCHA


Time limit is exhausted. Please reload CAPTCHA.