近々リリース予定のサイトがあるのだが、Let's Encryptの無料SSL証明書ではなく
ちゃんとした有料の証明書を使用しようと思ったのでその過程を書いてみる
SSL証明書はNamecheapからPositiveSSLを1年契約で$5.88で購入
ドメインの種類としては3つあるなかで一番安いDV-SSL。
【保存版】やさしく分かる!SSL移行の全手順(WordPress対応) | 大分県のインターネット集客専門コンサルティング | 株式会社シャーロック
SSLについての説明は以下のサイトがわかりやすい。
【図解】よく分かるデジタル証明書(SSL証明書)の仕組み 〜https通信フロー,発行手順,CSR,自己署名(オレオレ)証明書,ルート証明書,中間証明書の必要性や扱いについて〜 | SEの道標
SSLって何?意味や仕組みをわかりやすく解説! | さくらのSSL
SSLサーバー証明書の発行手順 – ラボラジアン
NginxでSSLを設定する方法を基本から学ぶ - Kattsu Sandbox
[SSL申請から設定までの流れ]
1) 秘密鍵の作成
2) CSR(証明書発行要求: Certificate Signing Request) の作成
3) サーバ証明書の取得
4) 秘密鍵と証明書を設置し、Nginx設定変更する
1)と2)を同時に行うコマンドもあるが、長いので噛み砕いて説明する意味を込めてコマンドを分けることにする。
1) 秘密鍵の作成
秘密鍵の作成と、以降で説明するCSRの作成には、opensslコマンドを使用する。
バージョンの確認
$ openssl version
OpenSSL 1.1.1g 21 Apr 2020
秘密鍵の作成は、サーバ上で行うため、まずは鍵と証明書を配置するためのディレクトリを作成する。以降の作業は全てこのディレクトリ内で行う。
また権限を厳しく設定する。
$ mkdir /etc/nginx/ssl
$ chown root:root -R /etc/nginx/ssl/
$ chmod 700 /etc/nginx/ssl
以下のコマンド入力後、パスフレーズを聞かれるので任意のパスフレーズを入力する。
openssl genrsaは秘密鍵を生成するコマンドで、以下のコマンドでは暗号化方式に「des3」を使用し、2048ビットのRSA秘密鍵を作成する。
また秘密鍵を「private.key」というファイル名で保存する。
$ openssl genrsa -des3 -out private.key 2048
暗号化方式には「-aes128 | -aes192 | -aes256 | -des | -des3」のどれかが選べるが、正直どれが良いのかとかは分からない...
色んなサイトを見て多かった設定が「-des3」なのでとりあえずこの方式を選ぶ。
またサーバ再起動時に毎回パスフレーズを聞かれるのを避けるため、オリジナルはバックアップし、パスフレーズは秘密鍵から削除しておく。
$ cp private.key private.key.with_pass_phrase
$ openssl rsa -in private.key -out private.key
バックアップしたオリジナル秘密鍵は別の媒体にもバックアップしておけば、サーバトラブル時などで秘密鍵が失われてしまってもうまく対応できる。
2) CSR(証明書発行要求: Certificate Signing Request) の作成
上記の1)で作成した秘密鍵を指定し、以下のコマンドでCSRを作成する。
$ openssl req -new -key private.key -out server.csr
- new: CSR新規作成
- key: 秘密鍵を指定
- out: CSRの出力先ファイル名を指定
コマンドを入力されると以下の項目を聞かれる。以下の項目以外は必須ではないので、Enterを押してスキップする。
Country Name・・・2文字の国コード (ex: JP)
State or Province Name・・・都道府県 (ex: Fukuoka)
Locality Name・・・市区町村 (ex: Hakata-city)
Organization Name・・・組織 (ex: 任意の組織名)
Organizational Unit Name・・・部署名(ex: Admin、Webmaster、System Team)
Common Name・・・SSL接続に使用するドメイン名 (ex: blog.example.jp)
Common Name は、SSL接続する際に使われるドメイン名(FQDN)を入力する
例えばhttps://blog.example.jp/page/というURLの場合、blog.example.jpを入力する
またワイルドカード証明書はサブドメイン名を「*」にする(例:*.example.jp)。
ワイルドカード証明書 CSR生成時の注意 | BestSSL
更新の際のことを考えて、上記の設定を記入した設定ファイルを読み込むことでも作成できる
OpenSSLによるSSL証明書の発行の準備 - Qiita
以下がCSRの内容を表示するコマンド
$ openssl req -in certreq.csr -text