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

  • 24
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

本番環境は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アクセスする(安全ではありません)をクリック)