2010-03-31 15:38:27 +0000 2010-03-31 15:38:27 +0000
63
63

自分で証明書チェーンを作成するには?

自分自身の OCSP レスポンダをセットアップしたいと思っています。そのためには、ルート証明書とそこから生成されたいくつかの証明書が必要です。

openssl を使って自己署名証明書を作成しました。これをルート証明書として使いたいと思います。次は派生証明書を作成したいと思います。しかし、その方法についてのドキュメントが見当たりません。誰かこの情報がどこにあるか知っている人はいますか?

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

ROOT -> 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 設定ファイルに必要な情報が含まれています。

# 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 の設定ファイルに必要な情報が含まれています。

証明書B以降を作成するには、どのようなコマンドラインを使えばいいのでしょうか?

Edit この記事 に答えがありました。証明書B(chain A -> B)は、この2つのコマンドで作成できます。

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

openssl.cnfファイルも変更してみました。

0x1&

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

回答 (4)

28
28
28
2010-03-31 18:03:18 +0000

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

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

  1. CAの自己署名証明書を作成します。

  2. クライアント証明書を発行するには、まず鍵を生成してからリクエストし(または外部システムから提供されたものを使用)、CAの秘密鍵を使用して証明書に署名します:

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

14
14
14
2012-04-29 17:54:40 +0000

CA を作成したら、それを使って以下のように署名することができます。

  • 鍵の作成 :

  • csr の作成 :

  • 署名 :

あなたの変更 :

basicConstraints=CA:TRUE # prev value was FALSE

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

9
9
9
2010-03-31 17:51:10 +0000

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

多くの製品では、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
-1
-1
-1
2018-11-06 22:59:55 +0000

この投稿を見つけました。https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server ](https://stackoverflow.com/questions/19665863/how-do-i-use-a-self-signed-certificate-for-a-https-node-js-server)

これはNode.JS用ですが、 このGitHub repoのスクリプトはopenSLLコマンドを使ってルートCA証明書とドメイン証明書を作成しています。

を使って実行します。bash make-root-ca-and-certificates.sh 'example.com'

または localhost の場合は以下のように実行します。bash make-root-ca-and-certificates.sh 'localhost'

make-root-ca-and-certificates.sh

#!/bin/bash
FQDN=$1

# make directories to work from
mkdir -p certs/{server,client,ca,tmp}

# Create your very own Root Certificate Authority
openssl genrsa \
  -out certs/ca/my-root-ca.key.pem \
  2048

# Self-sign your Root Certificate Authority
# Since this is private, the details can be as bogus as you like
openssl req \
  -x509 \
  -new \
  -nodes \
  -key certs/ca/my-root-ca.key.pem \
  -days 1024 \
  -out certs/ca/my-root-ca.crt.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Signing Authority Inc/CN=example.com"

# Create a Device Certificate for each domain,
# such as example.com, *.example.com, awesome.example.com
# NOTE: You MUST match CN to the domain name or ip address you want to use
openssl genrsa \
  -out certs/server/privkey.pem \
  2048

# Create a request from your Device, which your Root CA will sign
openssl req -new \
  -key certs/server/privkey.pem \
  -out certs/tmp/csr.pem \
  -subj "/C=US/ST=Utah/L=Provo/O=ACME Tech Inc/CN=${FQDN}"

# Sign the request from Device with your Root CA
# -CAserial certs/ca/my-root-ca.srl
openssl x509 \
  -req -in certs/tmp/csr.pem \
  -CA certs/ca/my-root-ca.crt.pem \
  -CAkey certs/ca/my-root-ca.key.pem \
  -CAcreateserial \
  -out certs/server/cert.pem \
  -days 500

# Create a public key, for funzies
# see https://gist.github.com/coolaj86/f6f36efce2821dfb046d
openssl rsa \
  -in certs/server/privkey.pem \
  -pubout -out certs/client/pubkey.pem

# Put things in their proper place
rsync -a certs/ca/my-root-ca.crt.pem certs/server/chain.pem
rsync -a certs/ca/my-root-ca.crt.pem certs/client/chain.pem
cat certs/server/cert.pem certs/server/chain.pem > certs/server/fullchain.pem
``` を使用します。

関連する質問

8
21
8
9
11