web-dev-qa-db-ja.com

シリアル番号のみ(crt / pemではない)を使用してクライアント証明書を取り消すことはできますか?

CAでいくつかのクライアント証明書に署名して発行しました。これで、次のように取り消すことができます。

openssl ca -name ${CA_NAME} -revoke ${USERS_DIR}/${USERNAME}.crt -keyfile $SSL_PRIVATE_DIR/ca.key -cert $SSL_CERTS_DIR/ca.crt

ここから

ただし、これにはnew_certs_dirフォルダー内の* .pems(例:01.pem、02.pem)へのアクセスが必要です。これらは使用できますが、クライアント証明書を取り消すために必要な唯一の情報がシリアル番号であるように感じます。ただし、取り消しフラグのmanページには、crt/pemファイルである必要があると記載されています。

-revoke filename
       a filename containing a certificate to revoke.

また、データベースファイルを手動で編集して、V(おそらく有効)をR(おそらく取り消し済み)に変更し、2番目のタイムスタンプ列にタイムスタンプを提供できることにも気付きました。そう:

V       180408071318Z           01      unknown /C=AU/ST=NSW/O=Blah/OU=Blah/CN=CA
V       180408071319Z           02      unknown /C=AU/ST=NSW/O=Blah/OU=Blah/CN=CA

V       180408071318Z           01      unknown /C=AU/ST=NSW/O=Blah/OU=Blah/CN=CA
R       180408071319Z    180408081319Z       02      unknown /C=AU/ST=NSW/O=Blah/OU=Blah/CN=CA

編集後にcrlを生成すると、

openssl ca -name ${CA_NAME} -gencrl -keyfile $SSL_PRIVATE_DIR/ca.key -cert $SSL_CERTS_DIR/ca.crt -out $SSL_PRIVATE_DIR/ca.crl -crldays 1095

そのシリアルに対応する証明書は無効になります。そのため、opensslがそのオプションを提供していないにもかかわらず、必要なのはシリアルだけでした。

だから私の質問は、シリアル番号のみを使用して証明書を取り消すコーシャ方法はありますか?または、これが行われない重要な理由はありますか?上記のようにデータベースファイルを手動で編集すると問題が発生しますか?

5
Dave

X509では、証明書を一意にするフィールドは、発行者とシリアル番号の組み合わせです。 2つのCAが同じシリアル番号を使用する場合があるため、シリアル番号のみが一意であるとは限りません。これが、通常両方の失効に必要な理由です。実際には、CAが1つしかない場合は、シリアルで十分です。しかし、それは一般的ではありません。これはコマンドが行うのと同じことなので、データベースを手動で編集しても問題はありません。

2
primetomas