36
43

More than 5 years have passed since last update.

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

Posted at

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

36
43
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
43