nginx
vagrant
SSL証明書

Vagrant環境でSSLを利用できるようにする(nginx編)

More than 1 year has passed since last update.

本番環境はSSLで動いているのに、開発環境は非SSL。

開発環境でSSLを使った開発がしたいのに、できない・・・!!」そんなあなたのためのTipsです。


開発環境(Vagrant)


  • OS: CentOS 6.4

  • nginx: 1.9.2


事前準備

基本的に、以下の作業はrootユーザで実行します


opensslのインストール


opensslがインストールされているか確認

$ openssl version



実行結果

===============================

OpenSSL 1.0.1e-fips 11 Feb 2013
===============================

インストールされていなかった場合、opensslをインストールする


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(証明書署名要求)の生成


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の中身を確認してみましょう。


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を生成した時に入力したCJPCN******.jp となっているはずです。

また、Subject Public Key InfoPublic-Keyを見ると、(2048 bit)となっています。

これは、秘密鍵を生成するときに2048bitの鍵を生成するようにオプション指定したからです。


3.SSLサーバ証明書の生成

いよいよ、オレオレ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の中身を確認した時と同様に、CJPCN******.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のリロード


nginxのリロード

$ service nginx reload



実行結果

Reloading nginx:          [  OK  ]


OKが返ってこれば、完璧です

いよいよ、SSL化されたことを確認します!


開発環境のURLにアクセス


URL

https://******.jp


ブラウザでアクセスして、鍵マークが表示されれば、SSL化成功です!!!

スクリーンショット 2016-03-25 15.39.43.png

※ Chromeでアクセスした場合、警告がでます。

(解消法:警告ページの詳細設定をクリック→******.jpアクセスする(安全ではありません)をクリック)