2017-03-06 8 views
0

これでCRLと証明書を渡すことができる方法があります。私は、アプリケーションの実行時にベンダーからの証明書を検証するために使用しました。X509証明書ユニットテスト - 証明書とそれを持つCRLを作成する必要があります

この中で最も難しいのはユニットテストです!

証明書ファイルとCRLファイルを作成してから、アプリケーションでリソースとして配布し、ユニットテスト中に渡すことができます。

私はまた、書かれたユニットテストを持っていますが、ハードコードされた値を持つ - しかし、今、私は次のように作成する方法を知っておく必要があります。

2 X509証明書。 1つのCRL

2つのX509証明書のうちの1つを入力するには、CRLが必要です。これにより、私は取消しの結果をテストすることができ、取消しも取り消すことができます。

私は以下のガイドを試しましたが、セキュリティは私の強みとはかけ離れており、動作させることはできません。

https://blog.didierstevens.com/2013/05/08/howto-make-your-own-cert-and-revocation-list-with-openssl/ 
+0

スタックオーバーフローは、プログラミングおよび開発の質問のサイトです。この質問は、プログラミングや開発に関するものではないので、話題にはならないようです。ヘルプセンターの[ここではどのトピックを参照できますか](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

+0

[認証局との証明書署名要求にどのように署名しますか?](http:// stackoverflow .com/a/21340898/608639)と[opensslを使用した自己署名証明書の作成方法](http://stackoverflow.com/q/10175812/608639) – jww

答えて

0

ジェイミー・グエンここで見つけることができます証明書と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 

証明書(エンドエンティティ証明書とも呼ばれます)では、それぞれに別の秘密鍵を生成する必要があります。我々はそれらをtest1test2と呼ぶでしょう。これらのそれぞれについて

openssl genrsa -aes256 -out private/test1.key 4096 
openssl genrsa -aes256 -out private/test2.key 4096 

、あなたがCAは、実際の証明書を生成するために使用する証明書署名要求(CSR)を生成します。 CA証明書の作成時に同様の質問が表示されます。あなたは普通の名前としてTest 1Test 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.crtcerts/root-ca.crtに取り消されたリーフ証明書in certs/test2.crt
  • 1つのCRL i n crl/root-ca.crl

注1:これはLinuxマシンでOpenSSLを使用することを前提としています。窓の指示が必要な場合は、certutilを提供することができます。

注2:このガイドでは、あなたの質問に直接関係のない部分は省略しています。このプロセスの詳細については、トップに掲載されているリンクを参照してください。

関連する問題