TLS 経由で OpenPGP 認証を使用したいのですが、実装が不足しているため、一時的な解決策である OpenPGP/X.509 ブリッジ証明書を使用しました。
このアプローチは、Foaf で使用されているアプローチと非常によく似ています:
https://svn.java.net/svn/sommer~svn/trunk/misc/FoafServer/pgpx509/src/net/java/dev/sommer/foafserver/utils/ PgpX509Bridge.java
基本的には、変換された PGP 公開鍵を証明書要求に含めて、変換された PGP 秘密鍵から証明書要求を作成します。次に、変換した PGP 秘密鍵でリクエストに署名します。
OpenPGP と OpenSSL のキー形式には互換性がないため、「変換された」という言葉を使用しています。OpenPGP キーからキー パラメータを抽出し、それらを使用して新しい X.509 互換 (OpenSSL) キーを形成する必要があります。それにもかかわらず、期待どおりに機能します。
その結果、X.509 証明書の公開鍵で使用される PGP 公開鍵パラメーターを含む X.509 証明書が作成されますが、ユーザー ID と公開鍵署名が含まれていないため、認証には使用できません。
ここで欠けているのは、サーバー認証です。サーバーは以前にユーザーの PGP 公開鍵に署名していますが、X.509 ブリッジ証明書を使用してそれを確認するにはどうすればよいですか?
PGP ユーザー ID を CN (Common Name) として使用している場合でも、元の OpenPGP キーで使用されているユーザー ID と同じであることをどのように証明すればよいですか?
X.509 ブリッジ証明書には公開鍵署名はなく、同じ鍵パラメーターのみが存在します。それらに対して安全にチェックできますか?
これは Python で行う必要がありますが、一般的な進め方についての提案は非常に役に立ちます。