ジェイミー・グエンここで見つけることができます証明書とCRLを、認証局を作成し、発行に大きなガイドを持っている:https://jamielinux.com/docs/openssl-certificate-authority/
これは私が緩くあなたの質問に答えるながらに言及されるものです。これらのコマンドの出力がどのように表示されるか不思議であれば、私は彼のサイトにあなたを紹介します。これは、すでに長いポストを管理しやすくするためにここでは省略されています。
基本的に、我々は次のことを行う必要があります:
- 認証局として機能するように、自己署名証明書を作成します
- 2つのリーフ証明書に署名するCA証明書を使用して、取り消し1の葉の証明書
- は自己記号を作成するCRL
を公開しますed CA証明書
まず、CAの設定を準備する必要があります。これはopenssl.cnf
として作業ディレクトリに配置する必要があり
# OpenSSL root CA configuration file.
[ ca ]
default_ca = ca_default
[ ca_default ]
dir = /etc/pki/CA
certs = $dir/certs
crl_dir = $dir/crl
new_certs_dir = $dir/newcerts
database = $dir/db/root-ca.index
serial = $dir/db/root-ca.serial
RANDFILE = $dir/private/.rand
private_key = $dir/private/root-ca.key
certificate = $dir/certs/root-ca.crt
crlnumber = $dir/db/root-ca.crlnumber
crl = $dir/crl/root-ca.crl
crl_extensions = crl_ext
default_crl_days = 180
default_md = sha384
name_opt = ca_default
cert_opt = ca_default
default_days = 375
preserve = no
policy = policy_loose
[ policy_strict ]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ policy_loose ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
[ req ]
default_bits = 3072
distinguished_name = req_distinguished_name
string_mask = utf8only
default_md = sha384
x509_extensions = int_ca
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
stateOrProvinceName = State or Province Name
localityName = Locality Name
0.organizationName = Organization Name
organizationalUnitName = Organizational Unit Name
commonName = Common Name
emailAddress = Email Address
countryName_default = US
stateOrProvinceName_default = MD
localityName_default =
0.organizationName_default = LAB
organizationalUnitName_default =
emailAddress_default =
[ root_ca ]
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
basicConstraints = critical, CA:true
keyUsage = critical, digitalSignature, cRLSign, keyCertSign
[ usr_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = clientAuth, emailProtection
crlDistributionPoints = URI:http://pki.lab.local/int-ca.crl
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
[ server_cert ]
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer:always
keyUsage = critical, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth
crlDistributionPoints = URI:http://pki.lab.local/int-ca.crl
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
[ crl_ext ]
authorityKeyIdentifier=keyid:always
authorityInfoAccess = caIssuers;URI:http://pki.lab.local/int-ca.crt
:あなたは彼のチュートリアルを通過したくない場合は、単に以下、やや簡略設定を使用することができます。
dir = /etc/pki/CA
行を修正して、作業中のディレクトリを指し、CDPで失効チェックを有効にする場合は、実際のドメインを指すようにCDP URLを変更する必要があります。
次に、CAが期待するファイルとディレクトリを作成し、CA証明書のRSA秘密鍵を生成する必要があります。注:CA秘密鍵はパスフレーズで保護されます。
mkdir db private certs crl newcerts csr & touch db/root-ca.index
echo 1000 > db/root-ca.serial & echo 1000 > db/root-ca.crlnumber
openssl genrsa -aes256 -out private/root-ca.key 4096
ここで、新しい秘密鍵を使用してCA証明書を生成する必要があります。秘密鍵を作成したときに入力したパスフレーズを尋ねられ、国名、州名、一般名などの情報を求められます。共通名フィールドはここで重要です。このテストでは、私はちょうどTest Root CA
を入れています。
openssl req -config openssl.cnf -key private/root-ca.key \
-new -x509 -days 3650 -sha256 -extensions root_ca \
-out certs/root-ca.crt
コマンドが正常に完了したら、あなたは、次のコマンドで見ることができる、certs/root-ca.crt
で新しい証明書が表示されます。葉を作成するにはリーフ証明書
を作成
openssl x509 -in certs/root-ca.crt -noout -text
証明書(エンドエンティティ証明書とも呼ばれます)では、それぞれに別の秘密鍵を生成する必要があります。我々はそれらをtest1
とtest2
と呼ぶでしょう。これらのそれぞれについて
openssl genrsa -aes256 -out private/test1.key 4096
openssl genrsa -aes256 -out private/test2.key 4096
、あなたがCAは、実際の証明書を生成するために使用する証明書署名要求(CSR)を生成します。 CA証明書の作成時に同様の質問が表示されます。あなたは普通の名前としてTest 1
とTest 2
を使うことができます。
openssl req -config openssl.cnf -key private/test1.key
-new -sha256 -out csr/test1.req
openssl req -config openssl.cnf -key private/test2.key
-new -sha256 -out csr/test2.req
csr
ディレクトリに2つの証明書要求があるはずです。これらを使用して証明書を生成します。これらの要求に署名するには、CA秘密鍵のパスフレーズを入力する必要があります。
openssl ca -config -in csr/test1.req -out certs/test1.crt \
-extensions server_cert -days 365 -notext -md sha256
openssl ca -config -in csr/test2.req -out certs/test2.crt \
-extensions server_cert -days 365 -notext -md sha256
certs
ディレクトリに2つの光沢のある新しいリーフ証明書が必要です。それらは以下のコマンドで見ることができます。証明書に
の取り消し
openssl x509 -in certs/test1.crt -noout -text
openssl x509 -in certs/test2.crt -noout -text
今楽しい部分です。証明書を取り消すプロセスは、署名と同様です。 Test 2
の葉を取り消すために、CA証明書と秘密鍵を使用します。次のコマンドには、CAの秘密鍵のパスフレーズが必要です。
openssl ca -config opnessl.cnf -revoke certs/test2.crt
あなたは好奇心旺盛であれば、この時点まで、私たちが発行した証明書のシリアル番号とタイムスタンプを記録してきたdb/root-ca.index
ファイルは、現在Test 2
の隣に第二失効のタイムスタンプを表示する必要があります。それは普通のテキストファイルです。
は、我々は単に(CA秘密鍵のパスフレーズが必要です)次の操作を行いCRLを生成するために、今すぐCRL
を公開:CRLを表示する
openssl ca -config openssl.cnf -gencrl -out crl/root-ca.crl
は簡単です。下記のコマンドを使用すると、シリアル番号Test 2
のエントリとその失効のタイムスタンプが表示されます。証明書は、次のコマンドが使用され、取り消されたことを確認するには
openssl crl -in crl/root-ca.crl -noout -text
:
cat certs/root-ca.crt crl/root-ca.crl > crl/crl-chain.pem
openssl verify -crl_check -CAfile crl/crl-chain.pem certs/test2.crt
Test 2
のためにこれを使用するには、失効した証明書のステータスを返す必要があります。 Test 1
の同じコマンドを実行するとOKに戻ります。
ラップアップ
と仮定すると、すべてが正常に働いていた、最終的な結果は次のようになります。
- 一つのCA証明書
- 一つの良い葉の証明書
- 一つ
certs/test1.crt
でcerts/root-ca.crt
に取り消されたリーフ証明書in certs/test2.crt
- 1つのCRL i n
crl/root-ca.crl
注1:これはLinuxマシンでOpenSSLを使用することを前提としています。窓の指示が必要な場合は、certutil
を提供することができます。
注2:このガイドでは、あなたの質問に直接関係のない部分は省略しています。このプロセスの詳細については、トップに掲載されているリンクを参照してください。
スタックオーバーフローは、プログラミングおよび開発の質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](http://stackoverflow.com/help/on-topic)を参照してください。おそらく、[スーパーユーザ](http://superuser.com/)や[Unix&Linux Stack Exchange](http://unix.stackexchange.com/)の方が良いかもしれません。 [Dev Opsについての質問はどこに投稿しますか?](http://meta.stackexchange.com/q/134306) – jww
[認証局との証明書署名要求にどのように署名しますか?](http:// stackoverflow .com/a/21340898/608639)と[opensslを使用した自己署名証明書の作成方法](http://stackoverflow.com/q/10175812/608639) – jww