Apatcheを使用しているサーバをhttps通信ができるようにします。
SSLの証明書は自己署名(通称オレオレ証明書)を使用する前提です。
OpenSSLとmod_sslをインストールします。
通常、OpenSSLは最初から入っています。
$ yum install mod_ssl $ yum install openssl
続いて証明書を配置するディレクトリを作ります。
証明書はhttpdの中に配置します。
$ cd /etc/httpd $ mkdir ssl.key/ $ cd ssl.key
続いて証明書を申請するための秘密鍵を作ります。
途中パスワードが聞かれますので秘密鍵のパスワードを指定します。
完了すると「-out」オプションで指定した名前でファイルが作成されます。
$ openssl genrsa -des3 -out server.key 1024 Enter pass phrase for server.key:{パスワード} Verifying - Enter pass phrase for server.key:{確認用パスワード}
秘密鍵に対して適切な権限を付与します。
$ chmod 400 server.key
続いて、秘密鍵からCSRファイル(公開鍵付きの申請書)を作成します。
国や都道府県等が聞かれますので設定できるものは設定します。
今回はオレオレ証明書なので空白でも問題はありません。
$ openssl req -new -key server.key -out server.csr Enter pass phrase for server.key:{上記で設定したパスワード} Country Name (2 letter code) [XX]:{国(日本ならJP)} State or Province Name (full name) []:{都道府県} Locality Name (eg, city) [Default City]:{市区町村} Organization Name (eg, company) [Default Company Ltd]:{団体名} Organizational Unit Name (eg, section) []:{部署} Common Name (eg, your name or your server's hostname) []:{ホスト名} Email Address []:{メールアドレス} A challenge password []:{空欄} An optional company name []::{空欄}
適切な権限を付与します。
$ chmod 400 server.csr
サーバ証明書の作成を行ないます。
「-days」オプションで有効期限を設定します。
単位は日なので36500は100年間有効という指定になります。
$ openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 36500 Enter pass phrase for server.key:{上記で設定したパスワード} [/bash light=1] 適切な権限を付与します。 $ chmod 400 server.crt [/bash light=1] 続いてApacheに証明書を設定します。 「ssl.conf」に設定を記述していきます。 念のためファイルをコピーしてバックアップをとってから編集します。 $ cd /etc/httpd/conf.d/ $ cp -p ssl.conf ssl.conf_org $ vi ssl.conf
「SSLCertificateFile」に証明書、「SSLCertificateKeyFile」に秘密鍵をそれぞれ指定します。
SSLCertificateFile /etc/httpd/ssl.key/server.crt SSLCertificateKeyFile /etc/httpd/ssl.key/server.key
Apacheを再起動します。
パスワードが聞かれますので先ほど設定したパスワードを入力します。
$ /etc/init.d/httpd restart Enter pass phrase:{上記で設定したパスワードを入力}
これでhttpsで接続することが可能となります。
オレオレ証明書なのでChromeでアクセスすると当然このような画面になります。
アクセスするときは例外に加える必要があります。
AWSでは証明書はロードバランサーに組み込むケースが普通です。
今回はiphoneアプリからダウンロードするファイルの置き場が必要なため簡易的に作成しました。
次回以降のどこかでまたその話には触れるかもしれません。