OpenSSLコマンドでSSL証明書を発行してAWS EC2のNginxに設定する方法

OpenSSLのバージョンを確認

# openssl version
OpenSSL 1.0.2k-fips  26 Jan 2017

秘密鍵ファイルの作成

秘密鍵を作成するディレクトリの作成

# cd /etc/ngnx
# mkdir ssl
# cd ssl

秘密鍵の作成

# openssl genrsa -des3 -out ./yourdomain.com.key 2048

Enter pass phrase for ./yourdomain.com.key:******** ← パスワードを入力+エンター
Verifying - Enter pass phrase for ./yourdomain.com.key:******** ← 再度パスワードを入力+エンター

キーファイル作成時に入力したパスワードはCSR作成時に必要ですので忘れないように控えておきましょう。

作成されたファイルの確認

# ls -l ./
total 4
-rw-r--r-- 1 root root 1743 Aug 28 11:32 yourdomain.com.key

yourdomain.com.keyというファイルが作成されました。

CSRファイルの作成

#  openssl req -new -key ./yourdomain.com.key -out ./yourdomain.com.csr
Enter pass phrase for ./yourdomain.com.key:******** ←キー作成時パスワードを入力
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Fukuoka
Locality Name (eg, city) [Default City]:Fukuoka-shi
Organization Name (eg, company) [Default Company Ltd]:mycompanyname.inc
Organizational Unit Name (eg, section) []:              
Common Name (eg, your name or your server's hostname) []:*.yourdomain.com
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
項目説明入力例
Country Name国を示す2文字のISO略語JP
State or Province Name都道府県Fukuoka
Locality Name市区町村Fukuoka-shi
Organization Name組織(会社)名Fullstack.inc
Organizational Unit Name部署名未入力でもOK
Common Name対象とするドメインyourdomain.com
ワイルドカードの場合↓
*.yourdomain.com
Email Addressサーバー管理者のメールアドレス 未入力でもOK
A challenge password 未入力でもOK
An optional company name 未入力でもOK

オプションのチャレンジパスワードが求められますが、このパスワードは CSR と、ユーザーと CA の間のトランザクションのみに適用されるものなので未入力でOKです。

全ての内容を入力し終えたらcsrファイルが作成されます。

# ls -l ./
total 8
-rw-r--r-- 1 root root 1005 Aug 28 12:11 yourdomain.com.csr
-rw-r--r-- 1 root root 1743 Aug 28 11:32 yourdomain.com.key

SSLサービス会社へ証明書の発行申し込み

生成したCSRで申込みをいます。
yourdomain.com.csrファイルの—-BEGIN CERTIFICATE REQUEST—–から—–END CERTIFICATE REQUEST—–までのテキストをSSLサービス会社に申請する際に使います。

# less yourdomain.com.csr

—-BEGIN CERTIFICATE REQUEST—–

………………………………………………………
…………英数字の文字列…………
………………………………………………………

—–END CERTIFICATE REQUEST—–

SSLサービスへの申込みはサービス提供会社ごとに違いますが、おおよそ次のステップで申請が完了します。 

STEP1 CSRの貼り付け
サーバの種類をその他を選択
作成したCSRをペースト(BEGINの行を含む)
STEP2 お客様情報入力
受信のためのメールアドレスを選択
その他情報の入力
STEP3 確認画面
内容を確認し登録ボタンをクリック
STEP4 完了

認証機関より承認確認メール受信

申請完了後にメールが届くので、メール内のリンクに承認するための説明とリンクが送られてくるので、その内容に従って、承認完了処理を行います。

証明書ファイルのメール受信

承認完了後再びメールが届きます。メールには以下の情報が記されています。
(添付ファイルに添付されている場合もあります)

Web Server CERTIFICATE SSLサーバ証明書
INTERMEDIATE CA 中間証明書

pemファイルの作成

サーバー証明書と中間証明書を結合してpemファイル作成します。
/etc/nginx/ssl/example.com.pemを作成しました。

Nginxの設定

設定ファイルをviでオープン

# vi /etc/nginx/sites-available/default

SSLの設定内容

.....
server {

    listen 443;
    server_name yourdomain.com;
    ssl on;

    # 秘密鍵
    ssl_certificate_key  /etc/nginx/ssl/yourdomain.com.key.rsa;
    # 証明書
    ssl_certificate      /etc/nginx/ssl/yourdomain.com.pem;

    ssl_session_timeout  5m;
    ssl_protocols  SSLv2 SSLv3 TLSv1;
    ssl_ciphers  ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;
    ssl_prefer_server_ciphers   on;

    .........
}

nginxの設定状態を確認

$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Nginxの再起動

$ sudo systemctl restart nginx

ブラウザからアクセス確認

https://申請したドメインでブラウザからアクセスしてSSLが有効状態で表示されたらOKです。

エラーが出た場合の対応方法

nginxにSSLファイルを指定後に起動(再起動)したらエラーメッセージが表示される場合

$ sudo restart nginx.service
Job for nginx.service failed because the control process exited with error code. See "systemctl status nginx.service" and "journalctl -xe" for details.

この場合はSSLのkeyファイル作成時に設定したパスワードをnginx起動時に入力しなければなりません。
自動入力する設定についてこちらの記事で解説していますので、参考にしてください。

Nginxの起動時にSSL証明書の秘密鍵のパスフレーズを自動で入力させる方法

以上でSSL証明書を発行してAWS EC2のNginxに設定する方法の完了です。おつかれさまでした!!

Leave a Reply

Your email address will not be published. Required fields are marked *