OpenSSL で Windows に プライベート認証局 を 構築する方法

2 件のコメント

今回は「OpenSSL で Windows に プライベート認証局(CA) を構築する方法」についてまとめます。

すでに OpenSSL が Windows へインストール、設定されていることを前提に認証局として必要な秘密鍵と公開鍵を作成する方法をまとめています。 まだ OpenSSL を導入していない場合、こちら の手順に従って先にインストールをお願い致します。

関連記事

概要

WindowsにOpenSSLが導入済みの前提で、認証局に必要な秘密鍵、公開鍵の作成および証明書の作成を行います。 本記事の対象範囲は以下のイメージです。

関連記事

認証局の秘密鍵作成

公開鍵認証でよく見る「DSA」「RSA」「EC」の3種類について、秘密鍵の生成方法をまとめました。

  • DSAアルゴリズムの場合
  • RSAアルゴリズムの場合
  • EC(楕円曲線)アルゴリズムの場合

DSAアルゴリズムの場合

openssl dsaparam -genkey -noout -out "./private/ca_key.pem" 1024
オプション 説明
-genkey 指定されたパラメータを利用して秘密鍵を生成することを指定。
-noout 秘密鍵生成で使うパラメータの出力を抑止することを指定。
-out filename 出力する秘密鍵のファイル名。
(数字) 出力する秘密鍵のビット数。

参考

RSAアルゴリズムの場合

openssl genrsa -out "./private/ca_key.pem" 2048
オプション 説明
-out filename 出力する秘密鍵のファイル名。
(数字) 出力する秘密鍵のビット数。

参考

EC(楕円曲線)アルゴリズムの場合

openssl ecparam -genkey -noout -name secp521r1 -param_enc explicit -out "./private/ca_key.pem"
オプション 説明
-genkey 指定されたパラメータを利用して秘密鍵を生成することを指定。
-noout 秘密鍵生成で使うパラメータの出力を抑止することを指定。
-name param 秘密鍵生成に利用するECパラメータを指定します。 利用可能なECパラメータの一覧は以下のコマンドで確認できます。
openssl ecparam -list_curves
-param_enc args explicit を指定することで鍵ファイルにすべての楕円曲線パラメータを埋め込みます。 これにより、楕円曲線名を認識できない環境でも楕円曲線が利用できるようになります。
-out filename 出力する秘密鍵のファイル名。

参考

認証局の証明書作成

上記のいずれかの方法で秘密鍵(ca_key.pem)が準備された状態で、それに応じた証明書(ca_cert.pem、ca_cert.cer)を作っていきます。

証明書(.pem)作成

openssl req -x509 -key "./private/ca_key.pem" -out "ca_cert.pem" -days 3650
オプション 説明
-x509 自己署名証明書生成することを指定。
-key filename 公開鍵(証明書)生成に利用する秘密鍵。
-out filename 出力する秘密鍵のファイル名。
-days args 証明書の有効期間(日数)を指定。デフォルトは30日。
-out filename 出力する秘密鍵のファイル名。

上記コマンドを実行するとウィザードでサブジェクトの入力が促されます。

Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo-to
Locality Name (eg, city) []:Minato-ku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Some Test Company
Organizational Unit Name (eg, section) []:Web Service Dept.
Common Name (e.g. server FQDN or YOUR name) []:127.0.0.1:3000
Email Address []:(入力せずEnter)
サブジェクト 略称 説明
Country Name C 国コードを入力。日本の場合は JP。 その他の国コードは digicert - SSL Certificate Country Codes を参照。
State or Province Name S 都道府県名を入力。
Locality Name L 市区町村名を入力。
Organization Name O 会社名を入力。
Organizational Unit Name OU 部署名を入力。
Common Name CN サーバー名を入力。 クライアント側から見えるサーバー名を指定しないとエラーになるので注意。
Email Address E メールアドレスを指定。

参考

証明書(.cer)作成

Windowsにおける証明書は拡張子が .cer のファイルです。

実はこのファイルの中身、 PEM または DER になっています。 つまり、前述した手順で作成されたPEM形式の公開鍵 (ca_cert.pem) の拡張子 .pem.cer に変更するとWindows向け証明書が作れます。

  1. 公開鍵 (ca_cert.pem) をコピー

    コピー元
    ca_cert.pem
    コピー先
    ca_cert - コピー.pem
  2. コピーした公開鍵 (ca_cert - コピー.pem) の拡張子を変更

    変更前
    ca_cert - コピー.pem
    変更後
    ca_cert.cer

証明書のインストール

前述の方法でWindows向け証明書(ca_cert.cer)が作成で来たら、何かしらの方法でクライアントへ転送し、ウィザードなどを使ってインストールしていきます。 具体的な手順は以下の別記事にまとめていますのでご参照ください。

今回は「OpenSSL を 使って Windows環境で 認証局構築 に 必要な 秘密鍵 と 証明書 の作成する方法」についてまとめました。 参考になったでしょうか? 本記事がお役に立っていると嬉しいです!!

最後に… このブログに興味を持っていただけた方は、 ぜひ 「Facebookページ に いいね!」または 「Twitter の フォロー」 お願いします!!

 

  1. 証明書(.pem)作成をしているのですがエラーが出て先へ進めません。
    「openssl req -x509 -key "./private/ca_key.pem" -out "ca_cert.pem" -days 3650」のコマンドを打つと下記のような文章がでます。

    unable to find 'distinguished_name' in config
    problems making Certificate Request
    132:error:0E06D06C:configuration file routines:NCONF_get_string:no value:crypto\conf\conf_lib.c:273:group=req name=distinguished_name

    どこをなおせはよろしいでしょうか?

    返信削除
    返信
    1. tx2toda さん

      ご質問ありがとうございます。
      Windows環境で利用されていますでしょうか?
      もしWindows環境で利用されているようであれば、環境変数の設定をご確認いただけますでしょうか。
      確認いただきたい環境変数は「OPENSSL_CONF」という変数です。
      この変数に「openssl.cfg」へのパスが設定されているかご確認をお願い致します。

      ※参考
       OpenSSL を Windows にインストールする方法
       https://garafu.blogspot.com/2018/07/openssl-install-windows.html#initialize

      よろしくお願いいたします。

      削除