次のワークフローを実装しようとしています。
- window.crypto を使用してブラウザで秘密鍵を生成する
- ブラウザーで PKCS10 証明書署名要求を作成する
- PKCS10 をサーバーに送信する
- サーバーはリクエストに署名し、x509 証明書を PEM 形式で返します
- ブラウザは自身の証明書を保存します
ブラウザで keygen タグを使用し、pkcs10 の代わりに SPKAC を使用しても、同じことが既に機能しています。ただし、ブラウザは返された証明書を保存せず、保存したいだけです。手動で証明書をブラウザーにインポートしようとすると、「証明書の秘密鍵が見つからないか無効です」というメッセージが表示されました。window.crypto.generateKey() によって生成された秘密鍵がブラウザのキーストアに保存されていないと思われます。キーストアに格納されている秘密鍵を取得するには?
最初の 2 つのステップの実装は、 http://blog.engelke.com/2014/08/23/public-key-cryptography-in-the-browser/に基づいています。
更新: 一部のブラウザーは OS キーストアを使用するため、別の方法でキーを OS キーストアに保存する可能性も検討しています。これまでにわかったこと:
この質問によると、Java は使用できません: Tell Java to use Windows keystore
Windows では、ActiveX コントロールを使用できます。
概要: X509 証明書を生成して有意義に使用するための標準的なクロスブラウザおよびクロス OS の方法は見つかりませんでした。これを行う方法がない組み合わせ (Windows 以外の OS での新しい chrome バージョン (keygen サポートの削除)) があります。