Log in



AmazonEC2のサーバにSSLを設定する手順

Saturday, December 3rd, 2011 by

Amazon Linux AMIで構築したWebサーバにSSLを設定する方法をまとめました。自分で使えればいいや的なメモですが、不適切な内容がありましたら、がんがんお知らせいただけると助かります。

前提条件
WebサーバとしてApacheを使っていること。

必要なモジュールが入っているか確認(opensslとmod_sslが必要)

yum list installed | grep ssl
openssl.i686 1.0.0e-2.16.amzn1 @amzn-updates

opensslは入っているが、mod_sslが不足しているので、yumでインストールする。

yum install mod_ssl

秘密鍵を生成
2048ビット長の秘密鍵を作成。作成した秘密鍵は、絶対外部に漏らさないこと!(※2014年2月現在、2048ビットが一般的ですが、将来的にはより長い鍵が必要になると思われます)

-秘密鍵: パスフレーズ付き
セキュリティー面ではこちらがオススメ。但し、Apacheの起動時にパスフレーズ入力が要求されます。

openssl genrsa -des3 2048 > server.key

-秘密鍵: パスフレーズ無し
大きな声では言えませんが、パスフレーズ無しで秘密鍵を作成した方が何かと運用しやすいです。※会社の方針に従って下さい。

openssl genrsa 2048 > server.key

秘密鍵からCSRを生成
CSR(Certificate Signing Request)とは、SSLサーバ証明書を認証局に発行してもらうためのファイルです。申請組織についての情報、SSLを使うドメイン名などを入力して、CSRファイルを作成します。

openssl req -new -key server.key > server.csr

証明書を発行する
SSL証明書の発行業者のサイトにアクセスし、先ほど作成したcsrファイルをアップロードすることで、証明書が発行されます。もちろん有償です。年間数千円のものから、数十万円のものまで幅広い価格帯のサービスがあります。1年契約で発行すると毎年SSL更新作業が発生しますので、3年や4年などの長めの契約がオススメです。有効期間が4年の証明書でも、安いものなら1万円未満で入手できます。

証明書を設置する。
秘密鍵と証明書を設置します。

[root@ec2-user]# grep SSLCertificate /etc/httpd/conf.d/ssl.conf | grep -v "#"
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

Apacheを再起動
パスフレーズ付きでSSLの秘密鍵を作っていると、Apacheの起動時にパスフレーズの入力を要求されます。

/etc/init.d/httpd restart

wgetで動作確認
オプション無しで実行すると、信頼できない証明書を使っているという警告が表示され、ファイルの取得に失敗する。証明書のチェックを無効化すれば正常に取得できる。

[root@~]# wget https://localhost/
--2011-12-03 14:41:45-- https://localhost/
localhost をDNSに問いあわせています... 127.0.0.1
localhost|127.0.0.1|:443 に接続しています... 接続しました。
エラー: localhost の証明書(発行者: `/C=JP/ST=Hyogo/L=Tatsuno/O=Nishimura/OU=Yoichiro/CN=quizgenerator.net/[email protected]')の検証に失敗しました:
自己署名証明書です。
エラー: 証明書に記載されている名前 `quizgenerator.net' とホスト名 `localhost' が一致しません
localhost に安全の確認をしないで接続するには、`--no-check-certificate' を使ってください。
[root@~]# wget https://localhost/ --no-check-certificate
--2011-12-03 14:41:58-- https://localhost/
localhost をDNSに問いあわせています... 127.0.0.1
localhost|127.0.0.1|:443 に接続しています... 接続しました。
警告: localhost の証明書(発行者: `/C=JP/ST=Hyogo/L=Tatsuno/O=Nishimura/OU=Yoichiro/CN=quizgenerator.net/[email protected]')の検証に失敗しました:
自己署名証明書です。
警告: 証明書に記載されている名前 `quizgenerator.net' とホスト名 `localhost' が一致しません
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません [text/html]
`index.html' に保存中

手元の環境からブラウザでアクセスする。
HTTPでアクセスでき、HTTPSでアクセスできないはず。

ec2の管理画面のセキュリティーグループを修正
SSLには443ポートを使うので、インスタンスのセキュリティーグループをチェックし、そのセキュリティーグループのInboundの443番を解放する。

改めてブラウザでチェック
Webページが表示されるはず。ブラウザのURL欄のあたりから、証明書に関する情報を確認できるはず。警告が表示されていないか確認しておくこと。

初版:2011年12月3日
改訂:2014年2月9日
改訂:2014年3月18日

参考にした記事
Apache+SSL環境構築の流れ

Leave a Reply