オレオレ証明書を作成する確実な方法

2019年8月1日

oreore

オレオレ証明書をWindows上で作成しようとすると、初心者はいろいろなところで躓いてしまいます。この記事は初心者がやっても再現性が高いように配慮して作成しました。

OpenSSLのWindows版をダウンロードする

正式にはソースからビルドするようですが、初心者はそんな面倒なことはしていられませんよね。インストーラ形式のOpenSSLは http://slproweb.com/products/Win32OpenSSL.html からダウンロードできますが、会社などでは勝手にソフトをインストールしてはいけないという規則があるところも多いですね。そこで、この記事では以下の場所にあるOpenSSLのバイナリを使用して説明していきます。

http://camera.shoppers-jp.com/openssl.zip

リンク切れしていたので、こちらに用意しました。

OpenSSL

ダウンロードしたら、Cドライブの直下にdevelopというフォルダを作成して、その中にダウンロードしたZIPファイルを展開してください。(つまり、C:\develop\openssl\openssl.exe が存在する状態にします)

秘密鍵を作成する

SSL通信では公開鍵暗号というものを使用しています。公開鍵で暗号化したデータは秘密鍵でしか復号できないというのが、公開鍵暗号の特徴です。公開鍵は暗号のみで復号はできないのです。最初に復号用の秘密鍵から作成していきます。公開鍵は秘密鍵から生成するので、一番最初に行うのは秘密鍵の作成です。

まずはOpenSSLを使用するための準備です。コマンドプロンプト上から下記コマンドを実行してください。

cd c:\develop\openssl
set OPENSSL_CONF=c:\develop\openssl\openssl.cfg

1行目は作成したOpenSSLのフォルダをカレントフォルダにしています。
2行目は設定ファイルを指定しています。

秘密鍵を作成します。下記コマンドを実行してください。

openssl genrsa -aes128 1024 > server.key

Enter pass phrase: と表示されたらパスワードを入力します。ここで入力したパスワードは以降の処理で秘密鍵を使用する際に入力しなければならないので、できるだけわかりやすい「password」などにしておきましょう。パスワードを入力すると Verifying – Enter pass phrase: と表示されますので、もう一度同じパスワードを入力してください。

これで「server.key」という秘密鍵が入ったファイルが作成されます。以降、すべてのファイルは先ほど指定したカレントフォルダの「c:\develop\openssl」配下に作成されます。

公開鍵(未署名)を作成する

秘密鍵から公開鍵を作成します。コマンドは簡単です。

openssl req -new -key server.key > server.csr

途中でパラメータの入力を求められるので、以下のように入力していきます。

  1. Country Name (2 letter code) [AU]:
    [JP]と入力する。
  2. State or Province Name (full name) [Some-State]:
    都道府県名を入力する。[Tokyo]
  3. Locality Name (eg, city) []: と表示されたら都市名を入力する。
    市区町村名を入力する。[Minato]
  4. Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    組織名を入力する。(適当で良いです)
  5. Organizational Unit Name (eg, section) []:
    部署名を入力する。(省略可)
  6. Common Name (eg, YOUR name) []:
    サーバのアドレスを入力する。ローカル環境の場合は[localhost]など。
  7. Email Address []:
    担当者のメールアドレスを入力する。(省略可)
  8. A challenge password []:
    証明書を破棄するときのパスワード。(自己署名証明書では使用できない)
  9. An optional company name []:
    別組織名(省略可)

すべて入力すると「server.csr」ファイルが作成されます。

公開鍵に署名する

先ほどの説明だと公開鍵と秘密鍵があれば良いということでした。しかし、このままではブラウザは公開鍵が正式なものなのか、通信途中で差し替えられた偽の公開鍵なのか判断できません。公開鍵が誰の公開鍵なのかを示すのが署名です。ベリサインなどの証明書発行機関の名前を見たことがある方も多いでしょう。オレオレ証明書では証明書発行機関の代わりに自分自身の秘密鍵を使って署名します。

openssl x509 -in server.csr -days 90 -req -signkey server.key > server.crt

途中で Enter pass phrase for server.key: と表示されたら秘密鍵のパスワードを入力します。今回はオレオレ証明書なので自分自身の秘密鍵を使用しています。本来だと、ベリサインなどの証明書発行機関が証明書発行機関自身の秘密鍵を使用して実施することになります。有効期限は90日に設定してありますが、必要に応じて設定を変えてください。

パスワードが正しいと「server.crt」という証明書が作成されます。

まとめ

cd c:\develop\openssl
set OPENSSL_CONF=c:\develop\openssl\openssl.cfg
openssl genrsa -aes128 1024 > server.key
openssl req -new -key server.key > server.csr
openssl x509 -in server.csr -days 90 -req -signkey server.key > server.crt

オレオレ証明書の発行と聞くと、とても高度な技術のように思いますが、一度やってみると単純な作業であることがわかります。次回は作成して証明書ファイルをApacheに適用して、SSL通信を行うところまでやってみます。初心者はOpenSSLを起動する段階で躓いたりしますが、この記事通りに行えば成功するはずです。楽しいオレオレ証明書ライフを送りましょう。

Apache

Posted by @erestage