ホームページ >バックエンド開発 >Golang >証明書に署名すると、認証キー識別子が SKID にコピーされます。

証明書に署名すると、認証キー識別子が SKID にコピーされます。

PHPz
PHPz転載
2024-02-09 13:27:32902ブラウズ

签署证书时,授权密钥标识符被复制到 SKID

php エディターの Strawberry は、署名証明書を導入するときに、認証キー識別子 (SKID) が署名プロセスで重要な役割を果たすことを指摘しました。証明書が署名されると、SKID が証明書にコピーされ、証明書の承認されたキーを識別します。この識別子の存在は、証明書の信頼性と合法性を保証するのに役立ち、その後の証明書の検証と管理も容易にします。 SKID のコピーは、証明書に署名するときに必要な手順であり、証明書の使用と保守において重要な役割を果たします。

質問の内容

csr と spacemonkeygo/openssl ラッパーを使用して証明書に署名しようとしています。

証明書に署名するためのコンソールの openssl コマンドは期待どおりに機能し、有効な証明書を取得できます。

リーリー

スクリーンショットからわかるように、スキッドと発行者の keyid は異なります。

ただし、Go のコードは間違った証明書を提供します。skid には、証明書を発行した keyid の正確な値が含まれています。これにより、「発行者」の無効な値が「認証キー識別子」にコピーされます。スキッドが発行者の keyid と同じであるため、証明書が自己発行であると「考えられ」ます。

リーリー

(生成されたものは正しいです)

#setissuer を呼び出さない場合、スキッドは新たに生成されますが、生成された証明書は依然として「無効」と表示されます。

コードのどこが間違っているのでしょうか?

更新: 2 つのラッパー (

spacemonkey/gopyopenssl) に拡張機能を追加した実装を比較しました。 ###行く:### リーリー

python (コメント一部省略):

リーリー

明らかな違いは API です。Python バージョンは、オーバーロードのパラメーターとして

subject

issuer を受け入れます。 go バージョンにはありません。 実装の違いは次のとおりです:

Python での呼び出し

x509v3_ext_nconf
  • x509v3_ext_conf_nid
  • go で呼び出されました どちらの関数も github にあります。
  • openspacemonkey/go-openssl を CA 署名で使用する場合、skid 拡張機能を追加することはできないと思います。

唯一の方法は、C バインディングを手動で使用し、「Python のように行う」ことのようです。

回避策

スキッドとauthoritykeyidentifierを追加する賢い回避策を実装しました。生成された証明書は有効です。ただし、

certificate

構造体の

x *c.x509 メンバーはエクスポートされないため、それらにアクセスする唯一の方法は、安全でないポインターとキャストを使用することです。 これは推奨されるアプローチではありませんが、spacemonkey/go が更新されるまでの 1 つの方法です (すぐに更新されると思われます)。
リーリー

以上が証明書に署名すると、認証キー識別子が SKID にコピーされます。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。