web-dev-qa-db-ja.com

自分の証明書チェーンを作成する方法

私は自分自身のOCSPレスポンダを設定したいと思います(テスト目的のみ)。これには、ルート証明書とそれから生成されたいくつかの証明書が必要です。

私はopensslを使って自己署名証明書を作成することができました。ルート証明書として使いたいのですが。次のステップは派生証明書を作成することです。私はこれを行う方法についてのドキュメントを見つけることができないようです。誰が私がこの情報を見つけることができる場所を知っていますか?

編集する
振り返ってみると、私の質問はまだ完全には答えられていません。問題を明確にするために、証明書チェーンを次のように表現します。

ルート - > A - > B - > C - > ...

私は現在ROOTとAの証明書を作成することができますが、私はもっと長い鎖を作る方法を知りませんでした。

ルート証明書を作成するための私のコマンドは次のとおりです。

openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem

証明書Aは次のように作成されます。

openssl genrsa -out client.key 1024
openssl req -new -key client.key -out client.csr
openssl ca -in client.csr -out client.cer

このコマンドは暗黙的にルート証明書に依存します。ルート証明書はopenssl設定ファイルで必要な情報を検索します。

ただし、証明書BはAにのみ依存する必要があります。これは、構成ファイルに登録されていないため、前のコマンドはここでは機能しません。

証明書B以降を作成するために使用するコマンドラインは何ですか?

編集する
私はこの記事で答えを見つけました。証明書B(チェーンA→B)は、次の2つのコマンドで作成できます。

# Create a certificate request
openssl req -new -keyout B.key -out B.request -days 365

# Create and sign the certificate
openssl ca -policy policy_anything -keyfile A.key -cert A.pem -out B.pem -infiles B.request

私はopenssl.cnfファイルも変更しました。

[ usr_cert ]
basicConstraints=CA:TRUE # prev value was FALSE

このアプローチはうまくいっているようです。

57
StackedCrooked

OpenSSLを直接使うことができます。

  1. 認証局の秘密鍵を作成します(これが最も重要な鍵です)。

    openssl req -new -newkey rsa:1024 -nodes -out ca.csr -keyout ca.key
    
  2. CAの自己署名証明書を作成します。

    openssl x509 -trustout -signkey ca.key -days 365 -req -in ca.csr -out ca.pem
    
  3. 最初に鍵を生成してクライアント証明書を発行し、次に要求して(または外部システムから提供された証明書を使用して)、CAの秘密鍵を使用して証明書に署名します。

    openssl genrsa -out client.key 1024
    openssl req -new -key client.key -out client.csr
    openssl ca -in client.csr -out client.cer
    

(これらのコマンドを私のopenssl.confファイルと一緒に使用しているので、オプションをいくつか追加する必要があるかもしれません。最初に独自の.confファイルをセットアップする必要があるかもしれません。)

27
twk

CAを作成したら、それを使用して署名することができます。

  • 鍵を作成します。

    openssl genrsa -out key_A.key  1024
    
  • CSRを作成します。

    openssl req -new -key key_A.key -out csr_A.csr
    You are about to be asked to enter information etc....
    
  • サインしてください。

    openssl x509 -req -days 365 -in csr_A.csr -CA CA_certificate_you_created.crt \
    -CAkey CA_key_you_created.key -set_serial 01 -out crt_A.crt
    

    以下同様に* _Aを* _Bに、CA_certificate_you_created.crtcrt_A.crtに、CA_key_you_created.keykey_A.keyに置き換えます。

あなたの変化:

basicConstraints=CA:TRUE  # prev value was FALSE

発行した証明書を他の証明書の署名に使用できることを意味します。

12
Mr_and_Mrs_D

OpenSSLには、自己署名ルートCAの証明書とそれに対応する秘密鍵を作成するためのPerlスクリプト "CA.pl"が付属しています。そのルートCAで今後署名する証明書(別名問題)を追跡するのに役立つ、いくつかの単純なファイルとディレクトリ。また、他のキーペアや証明書署名要求(CSR)を生成したり、それらのCSRを処理したり(つまり、証明書を発行したり)したりするのに役立ちます。

多くの製品では、CA証明書にCA証明書としてマークする特定の属性を含めることをCA証明書に要求しています。そうしないと、他の証明書の有効な署名者/発行者として認められません。作成した自己署名証明書にその属性が含まれていない場合は、他のソフトウェアで有効なルートCA証明書のように扱うことができない可能性があります。

正しく思い出した場合、構文は次のようになります。

CA.pl -newca    # Create a new root CA  

CA.pl -newreq   # Create a new CSR

CA.pl -sign     # Sign a CSR, creating a cert  

CA.pl -pkcs12   # Turn an issued cert, plus its matching private key and trust chain, into a .p12 file you can install on another machine    
8
Spiff

これは1つのコマンドで実行できます。

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365

秘密鍵をパスフレーズで保護したくない場合は、-nodes(DESなし)を追加することもできます。それ以外の場合は、「少なくとも4文字」のパスワードの入力を求められます。

有効期限に影響を与えるために任意の数に置き換えることができるdaysパラメータ(365)。それはそれから「国名」のような事のためにあなたを促すでしょう、しかしあなたはただ打つことができます Enter そしてデフォルトを受け入れます。

証明書の内容に関する質問を抑制するために-subj '/CN=localhost'を追加します(localhostを希望のドメインに置き換えます)。

以前にブラウザに証明書をインポートしない限り、自己署名証明書は第三者に対して検証されません。証明書チェーンをインストールせずに証明書をブラウザで受け入れられるようにするには、 認証局 (CA)で署名された証明書を使用する必要があります。

0
vharron