社内のいくつかの内部サービス用に自己署名ルート認証局を作成し、それを自分で構成しました(ほとんどがHTTPS経由で提供されます)。次に、これらのサービスの証明書を作成し、このCAで署名しました。
ここで、このCAから発行された既存のサーバー証明書を無効にすることなく、x509拡張(CRL配布ポイント)をルートCAに追加します。これは可能ですか?
私が理解しているように、対応する秘密鍵へのアクセスは証明書IDに対する「完全な権限」のために必要かつ十分であるため、私の直感は「はい」です。つまり、証明書の生成時に(おそらく)証明書に公開キーと共に組み込まれた何らかのナンスがない限りです。
私はまだSSL証明書管理にかなり慣れていませんが、標準のトラストチェーンの基本を理解しています。また、他のPKI暗号化の基本的な使用にも慣れています。SSHキーを管理し、署名と暗号化にGPGを使用します。私はコンピューターサイエンスを勉強しましたが、私は暗号学の独学者です。
オリジナルのIIRCのCSRを作成したことはありません(それはの直接出力だったと思いますopenssl req -new -x509
)。もちろん、元のCAの秘密キーはまだ持っています。それを使用して、元の証明書を証明書署名要求に「逆変換」することができました。
openssl x509 -x509toreq -in MyCA.pem -out MyCA.csr -signkey private/MyCA.key
これが上記のナンスを効果的に「抽出」し、証明書を再作成できるようになることを望んでいましたが、今回はcrlDistributionPoints
フィールドで、したがって元のCAで署名されたすべての証明書は、この新しいCAに対して検証しますが、例外がありますそのクライアントは、フィールドで指定されたHTTP URLから(現在は空の)CRLファイルを取得します。
だから私は拡張設定ファイルを作りましたext.conf
:
[ cert_ext ]
subjectKeyIdentifier=hash
crlDistributionPoints=URI:http://security.mycompany.co.za/root.crl
そして、CSRからルートCAの新しいバージョンを生成しました。
openssl x509 -extfile ./ext.conf -extensions cert_ext -req -signkey private/MyCA.key -in MyCA.csr -out MyNewCA.pem
これで証明書を表示すると openssl x509 -text -in MyNewCA.pem | less
私はCRL拡張部分を見ることができます:
X509v3 extensions:
X509v3 Subject Key Identifier:
82:D0:01:03:49:FF:30:16:FA:DC:0A:1E:C1:8C:3D:66:A1:78:FF:F8
X509v3 CRL Distribution Points:
Full Name:
URI:http://security.mycompany.co.za/root.crl`
しかし悲しいかな!以前に署名した証明書は、この証明書に対して検証されなくなりました。
openssl verify -verbose -CAfile MyCA.pem git.pem
git.pem: OK
openssl verify -verbose -CAfile MyNewCA.pem git.pem
git.pem: <redacted DN>
error 20 at 0 depth lookup:unable to get local issuer certificate
ほとんどの場合、証明書がどのように機能するのか、そしてその理由についてより多くの洞察を探しています。しかし、私はこの問題につながる問題の解決策も歓迎するので、ここにも背景情報があります。
どのように私はこの混乱になった:エクスプローラ人民元は、Windows上で証明書GUIをインストールするか、または→を経由して、私のCAがインストールされると、HTTPS内部サービスには素晴らしい仕事/usr/local/share/ca-certificates
が続くupdate-ca-certificates
DebianとUbuntuの上。しかし、最近、例外が発生しました。Windows上のGit、特にSSLバックエンドとしてWindows Secure Channelを使用するためにインストールされている場合です。デフォルトでは、SSL証明書にCRLフィールドが存在する必要があるようです。
だから私はそれが実際にWindows Secure Channelの問題だと思うのは、私が走り続けるエラーメッセージは完全にMicrosoft固有のものだからです: fatal: unable to access 'https://angery@git.mycompany.co.za/gitblit/r/secret_project.git/': schannel: next InitializeSecurityContext failed: Unknown error (0x80092012) - The revocation function was unable to check revocation for the certificate.
OpenSSLでGitをインストールし、git.http.sslcainfoが指すファイルにCAを手動で連結すると動作しますが、ユーザーがこのプロセスよりも手間がかかると感じた場合、SSL ID検証に気を取られない傾向があります「簡単な」Windows証明書インストーラーGUIをクリックします。
-x509toreq
既存のルートCAからすべての一意の情報を回復することを望んでいましたが、そうでないか、そこからのプロセスに問題があります。
req -new -x509
そしてx509 -req -signkey
デフォルト乱数(これは上書きすることができるが)有効ナンスに自己署名証明書のシリアル両方。あなたの子供の証明書(またはそれらのいずれか)を使用すると、使用した場合ケースになります「発行人+シリアル」オプション(の代わりに、または「キーID」オプションに加えて)、使用してAuthorityKeyIdentifierが含まれている場合ca
、あなたは、上流のデフォルトの設定ファイルでの古いルートと同じシリアルで新しいルートを作成する必要があります。を使用します-set_serial
。...