本番環境はSSLで動いているのに、開発環境は非SSL。
「開発環境でSSLを使った開発がしたいのに、できない・・・!!」そんなあなたのためのTipsです。
開発環境(Vagrant)
- OS: CentOS 6.4
- nginx: 1.9.2
事前準備
基本的に、以下の作業はrootユーザ
で実行します
opensslのインストール
$ openssl version
===============================
OpenSSL 1.0.1e-fips 11 Feb 2013
===============================
インストールされていなかった場合、opensslをインストールする
$ yum install mod_ssl
ファイルを保存しておくディレクトリの作成
$ mkdir /etc/nginx/ssl/
ssl配下に必要なファイルを保存します。
オレオレ証明書を作る
SSLを利用できるようにするためには、以下の3つが必要となります。
- 秘密鍵
- 証明書署名要求(CSR:サーバ証明書を発行するための署名要求)
- SSLサーバ証明書
本来、秘密鍵とCSRは自分自身で作成し、正規ストアでSSLサーバ証明書を購入します。
SSLサーバ証明書を購入する際に、CSRが必要となります。
一方、オレオレ証明書は、自分でSSLサーバ証明書を作ります。
それでは、オレオレ証明書を作っていきましょう。
1.秘密鍵の生成
$ cd /etc/nginx/ssl/
$ openssl genrsa 2048 > server.key
2.CSR(証明書署名要求)の生成
$ openssl req -new -key server.key > server.csr
上記のコマンドを実行すると、国名や組織名、E-mail等の入力を促されます。
基本的に無視してOKですが、今回は国名と開発環境で使っているFQDNだけ入力しました。
※ ******.jp
は自分の開発環境で使っているFQDNに置き換えてください。
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) []: ******.jp ←入力
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
ここで、作成したCSRの中身を確認してみましょう。
$ openssl req -text < server.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=JP, L=Default City, O=Default Company Ltd, CN=******.jp
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
(略)
Exponent: 65537 (0x10001)
Attributes:
(略)
Signature Algorithm: sha1WithRSAEncryption
(略)
-----BEGIN CERTIFICATE REQUEST-----
(略)
-----END CERTIFICATE REQUEST-----
Subject
に着目すると、CSRを生成した時に入力したC
がJP
、CN
が******.jp
となっているはずです。
また、Subject Public Key Info
のPublic-Key
を見ると、(2048 bit)
となっています。
これは、秘密鍵を生成するときに2048bitの鍵を生成するようにオプション指定したからです。
3.SSLサーバ証明書の生成
いよいよ、オレオレSSLサーバ証明書の作成です。
$ openssl x509 -req -days 3650 -signkey server.key < server.csr > server.crt
Signature ok
subject=/C=JP/L=Default City/O=Default Company Ltd/CN=******.jp
CSRの中身を確認した時と同様に、C
がJP
、CN
が******.jp
となっています。
これで、オレオレSSLサーバ証明書の完成です。
続いて、nginxにSSLの設定を組み込みます。
SSLの設定(nginx)
1. 設定ファイルの編集
### すでにserverに関する設定が書かれているファイルがある場合、
### そのファイルを書き換えてください
$ vim /etc/nginx/conf.d/ssl.conf
================================
server {
listen 443 default ssl;
ssl on;
ssl_certificate /etc/nginx/ssl/server.crt;
ssl_certificate_key /etc/nginx/ssl/server.key;
server_name ******.jp;
location {
(略)
}
}
================================
2.設定ファイルの文法が間違っていないことを確認
$ service nginx configtest
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
上記の表示が出れば、大丈夫です!
エラーが出ている場合、該当箇所を再度確認しましょう。
3.nginxのリロード
$ service nginx reload
Reloading nginx: [ OK ]
OK
が返ってこれば、完璧です
いよいよ、SSL化されたことを確認します!
開発環境のURLにアクセス
https://******.jp
ブラウザでアクセスして、鍵マークが表示されれば、SSL化成功です!!!
※ Chromeでアクセスした場合、警告がでます。
(解消法:警告ページの詳細設定
をクリック→******.jpアクセスする(安全ではありません)
をクリック)