SSLサーバ証明書の作り方をわかりやすく

LINEで送る
LinkedIn にシェア
Pocket

SSLサーバ証明書を使っているサイト

Webサイトの常時SSL化が叫ばれていますが、SSL化するのは意外と難しいです。このサイトではWindows10のパソコンでSSLサーバ証明書を作れるようになることを目的として作り方を説明します。

順番に実行していただければ簡単にできると思います。最終的なアウトプットはSSL秘密鍵のファイルをSSLサーバ証明書の22つのファイルです。

結論
  1. SSLサーバ証明書は公開して良い
  2. SSL秘密鍵は同じ物を作成することは相当に難しいので、作成したSSL秘密鍵は必ずバックアップを取る
  3. SSL秘密鍵は秘密にして、厳重に管理する
  4. SSLサーバ証明書は信頼できる機関から発行してもらうとSSLサーバ証明書を信頼してもらえる
  5. CSR(証明書署名要求)はSSL秘密鍵の中から、SSLサーバ証明書を発行するために必要な情報だけを取り出したデータである

SSLサーバ証明書に必要な物

SSLサーバ証明書と呼ばれていますが、原理は公開鍵暗号の技術を使っています。公開鍵暗号はその名の通りデータを暗号化する鍵が2つ必要ではあるのですが、一つの鍵を公開することができる暗号化方式です。

公開鍵暗号の特徴をまとめると以下になります。

公開鍵暗号の特徴
  1. 秘密鍵で暗号化したデータは、公開鍵でしか複合できない
  2. 公開鍵で暗号化したデータは、秘密鍵でしか複合できない
  3. 公開鍵でデータを複合できたということは、対応する秘密鍵を持つ人が暗号化したことが特定できる

SSL秘密鍵

SSL秘密鍵は、暗号化通信を始める際に必要な情報を管理しています。秘密鍵のは暗号の2010年問題(外部サイト)から2048ビット以上使うことを推奨されています。つまり2048ビット使う場合は、22048の種類のデータの中から一つをえらんで鍵として使っています。

秘密鍵は名前の通り、絶対に秘密にしておく必要があります。

SSLサーバ証明書

SSLサーバ証明書は、SSL秘密鍵に対応する公開鍵のことを言います。SSL秘密鍵とSSLサーバ証明書の2つが無いとWebサイトのSSL化はできません。

CSR(証明書署名要求)

SSL秘密鍵から、SSLサーバ証明書を作る時に、SSL秘密鍵の特徴を表す情報と組織情報を指定して組み合わせたものをCSR(証明書署名要求)と言います。

CSRが必要な理由は、認証局にSSLサーバ証明書を発行してもらうために、最低限必要なSSL秘密鍵の特徴を認証局に提供するためです。

SSLサーバ証明書を作れる環境の準備

OpenSSLのインストール

Windows用のOpenSSLを作るのは手間がかかりますので、すでに公開されているサイト(外部サイト)から手に入れましょう。2020年2月15日現在、以下のような外観です。

Windowsインストーラ付きOpenSSLの配布サイト

上のサイトから下に半分くらいスクロールすると、下の図のようにOpenSSLのダウンロードリンクが表示されます。

Windows10用OpenSSLダウンロードページ

SSLサーバ証明書を作成したり、確認するだけであればLight版で事足ります。64bit版のOSの場合はWin64が付いているリンクを、32bit版のOSの場合はWin32が付いているEXEのリンクをクリックしてインストーラをダウンロードします。

ダウンロードするとWin64OpenSSL_Light-1_1_1d.exeか Win32OpenSSL_Light-1_1_1d.exeのインストーラファイル名になります。 ダウンロードしたインストーラを実行します。

OpenSSLインストーラを起動

上の図は64bit版ですが、起動すると下のようなウィンドウが開きます。

OpenSSLインストールのライセンス合意確認

上の図のようにライセンス合意画面が表示されます。赤枠を選択して、右下のNextをクリックします。

OpenSSLの保存場所を指定

上の図のようにOpenSSLの保存先を指定する画面に変わります。変更が不要なら右下のNextをクリックします。

OpenSSLのスタートメニューの分類

上の図は、OpenSSL用のスタートメニューをどこに作成するかフォルダ名を指定します。指定した名前のフォルダがスタートメニューに作成されます。右下のNextをクリックします。

上の図は、OpenSSLの動的ライブラリをとこに置くかのウィンドウです。変更は不要ですので、右下のNextをクリックします。

上の図はインストール前の最終確認画面です。間違いなければ右下のNextをクリックします。

上の図は、OpenSSLのインストールが成功したことを示しています。寄付をされるのであればチェックボックスにチェックを入れてFinishをクリックします。

OpenSSLコマンドのPATHの設定

OpenSSLのインストールが完了しましたが、まだ実行するにはOpenSSLへのコマンドのパスを通しておかないとフルパスで指定する必要があります。ここで便利に使えるようPATH変数に加えておきます。

OpenSSLコマンドにパスを通すためPCのプロパティを表示

上の図のように、①タスクバーの検索メニュータスクバーの検索メニューをクリックして、PCと入力します。②メニュー左上にPCが表示しますので、右クリックして、③プロパティをクリックします。

コンピュータの基本的な情報の表示

上の図のようにコンピュータの基本的な情報の表示ウィンドウを表示します。左側メニューの赤枠内「システムの詳細設定」をクリックします。

システムのプロパティ

上の図のように、システムのプロパティが表示されます。赤枠で囲っている環境変数ボタンをクリックします。

環境変数の一覧画面

上の図のように環境変数の設定画面が表示されます。①赤枠のPATH部分をクリックして、青色背景に変更して、②右下の編集ボタンをクリックします。

PATH環境変数の編集画面

上の図のように、ウィンドウが開きます。先ほどのパス変数を一行ごとに区切って表示しています。上の図の赤枠のように、最初の空行をダブルクリックして、インストールしたフォルダに/binを付けた文字列を入力します。

例えばC:64ビット版のOpenSSLを標準のフォルダにインストールした際は下の図のように入力します。

PATH変数を追加中

上の図のように入力します。入力が完了したらEnterキーで入力した文字列を確定します。

OpenSSLのパスを追加した直後

上の図のように、①入力したパスの文字列が確定したら、②OKをクリックします。

OpenSSLコマンドのPATH設定を確認

では実際にOpenSSLコマンドがフォルダを省略して使えるか確認します。コマンドプロンプトを開きます。openssl version とコマンドを入れてみます。

OpenSSLコマンドのパス設定を確認

上の図のように、OpenSSLのバージョンが返ってきたら成功です。

Webサイト名の決定

Webサイト名は、例えばこのサイトで言えばsingomemo.comになります。

Webサイト名と使うWebサーバーで名前が異なる場合は、SSLサーバ証明書がChromeやFirefoxなどのWebブラウザでエラーを表示しますので、気を付けましょう。

特にwww.有りのサイトと無しのサイトがある場合はサイト名が異なります。2つのSSLサーバ証明書が必要となりますので、注意してください。

Webサイト名は英大文字・英小文字・数字と特殊文字はハイフン(-)とアンダースコア(_)までが安全です。他の特殊文字(アスタリスク(*)やパーセント(%)、シャープ(#)やビックリマーク(!))はトラブルを引き起こしかねませんので使わないようにしましょう。なお、大文字と小文字は区別しません。

SSLサーバ証明書を作る

お待たせしました。いよいよSSLサーバ証明書を作成します。OpenSSLコマンドを使ってSSLサーバ証明書を作成する順番は次の通りです。

ポイント
  1. SSL秘密鍵を作成します
  2. CSR(証明書署名要求)を作成します。
  3. 認証局にCSRと他に必要な書類を提出します。
  4. 認証局からSSLサーバ証明書を受け取ります。

SSL秘密鍵の作成

どこでも良いのですが、フォルダを作ります。ここではデスクトップにTmpフォルダを作ります。

SSL秘密鍵を作成するコマンド

 openssl genrsa 2048 > private.key 

引数について
 genrsa    RSA形式の秘密鍵を作成
 2048    秘密鍵のビット数。2048ビット以上を推奨
 >      標準出力を書き出す先をコンソールから変更する
 private.key private.keyファイルへ出力

実際にコマンドを実行すると以下のようなファイルになります。

上の図は2つのことを実行しています。①opensslコマンドでSSL秘密鍵を作成します。出力するSSL秘密鍵のデータをprivate.keyファイルにリダイレクトして保存します。②typeコマンドでprivate.keyファイルの内容を表示します。これはテキストエディタで開いてみてもOKです。

SSL秘密鍵のファイルは「—–BEGIN RSA PRIVATE KEY—–」と「—–END RSA PRIVATE KEY—–」で囲まれていれば正常にできれいます。

これでSSL秘密鍵を作成することができました。なお、SSL秘密鍵はコマンドを実行するごとに内容が変わります。一回作成したSSL秘密鍵と同じ物は得られませんので、本番用にSSL秘密鍵を作成する際はバックアップを必ず取ることをお勧めします。

CSR(証明書署名要求)の作成

SSL秘密鍵を作成したら、SSLサーバ証明書を作成するために中間データのCSRを作成します。CSRはSSL秘密鍵の特徴と、Webサイトの情報を入力します。

CSR(証明書署名要求)を作成するコマンド

 openssl req -new -key private.key > csr.pem 

引数について
 req     作成を指示します
 -new    新しくCSRを作成します
 -key   SSL秘密鍵のファイルを指定します
 >    標準出力を書き出す先をコンソールから変更します
 csr.pem CSRのデータをcsr.pemファイルへ出力します

では実際に作ってみましょう。コマンドプロンプトを開き、先ほどSSL秘密鍵を作成したフォルダへ移動して、CSRを作成します。

CSR作成コマンドを実行すると、赤枠内の表示で止まります。Country Nameは国名で日本はJPを入力してください。次にState or Provinceは州ですが、日本では都道府県を指定します。上の図では「**-ken」としてます。Locality Nameは市を入力します。上の図では「**-shi」としてます。Organizational Nameは会社名、Organizational Unit Nameは会社の部署名です。

次のCommon Nameが重要です。Common NameはWebサイトの名前で、公開する時に指定するサイト名と合わせてください。www有り無しも含めてです。

後の3つ、Email AddressとA Challenge password、An optional company nameは空欄で大丈夫です。

では作成したCSRのファイルを見てみます。

CSRファイルの内容を表示

上の図のようになります。「—–BEGIN CERTIFICATE REQUEST—–」と 「—–END CERTIFICATE REQUEST—–」で囲まれていればCSRのファイルが正常にできています。

SSLサーバ証明書の作成

SSLサーバ証明書は認証局から購入する方法が一般的です。グローバルサイン(外部サイト)が人気でしょうか。認証局を運営するサイトにCSRや必要な書類を送付してSSLサーバ証明書を提供してもらう方法です。認証局ごとに購入方法が異なりますので、認証局の手順をご確認ください。

ここでは自己署名によるSSLサーバ証明書の作成を紹介します。自己署名ですが、SSL暗号化通信は実現できます。

自己署名のSSLサーバ証明書を作成するコマンド

 openssl req -x509 -days 365 -key private.key -in csr.pem > certificate.pem 

引数について
 req     作成を指示します
 -x509   X.509形式の証明書を作成します
 -days  SSLサーバ証明書の有効日数を指定します
 -key   SSL秘密鍵のファイルを指定します
 -in   CSRファイルを指定します
 >    標準出力を書き出す先をコンソールから変更します
 certificate.pem SSLサーバ証明書をcertificate.pemファイルへ出力します

それでは実際にコマンドプロンプトを開き、SSLサーバ証明書を作って表示してみます。

SSLサーバ証明書の作成と内容を表示

上の図のようになります。「—–BEGIN CERTIFICATE—–」と 「—–END CERTIFICATE—–」で囲まれていればSSLサーバ証明書のファイルが正常にできています。

SSLサーバ証明書とSSL秘密鍵の対応確認

SSLサーバ証明書とSSL秘密鍵、CSRの3つのファイルがあるわけですが、ファイルの内容を見てもすぐにそのWebサイトの証明書かわからないものです。そこで3つのファイルが同じWebサイト用かを確認する方法を説明します。

SSL秘密鍵・CSR・SSLサーバ証明書が同じWebサイト用かを確認するコマンド

3つのファイルにあるmodulesの値が一致すると同じWebサイト用のものと確認できます

SSL秘密鍵
 openssl rsa -noout -modulus -in private.key 

CSR(証明書署名要求)
 openssl req -noout -modulus -in csr.pem 

SSLサーバ証明書
 openssl x509 -noout -modulus -in certificate.pem 

引数について
 rsa     SSL秘密鍵の処理を指示します
 req    CSRの処理を指示します
 x509    SSLサーバ公開鍵(X.509形式)の処理を指示します
 -noout  入力値の表示を抑制します
 -modulus Modulus値を表示します
 -in   入力ファイルを指定します

今回作った、SSL秘密鍵・CSR(証明書署名要求)・SSLサーバ証明書のファイルについて、Modulus値を表示してみます。

SSL秘密鍵・CSR・SSLサーバ証明書のmodulus値の確認

3つのファイルともにmodulus値が合っていることがわかります。

以上でSSLサーバ証明書の作成方法は終了です。

LINEで送る
LinkedIn にシェア
Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です