MS CryptoAPI と PKCS#11 (プロバイダーを .dll に登録) を使用して、Java アプレット (組み込み) で SmartCard にアクセスできます。両方を使用できますが、現在、すべてのキーボード/Windows バージョンをより簡単にサポートするために、CryptoAPI を使用しています。
keystore = KeyStore.getInstance("Windows-MY");
keystore.load(null,null);
Javascript を使用して Java と通信し、開発中の Web アプリケーションでいくつかの操作に署名しています。
デフォルトのユースケースはまさに私が必要としているものです:
- キーストアを取得/ロードします
- 何かに署名しようとすると、PIN が要求され、導入されると、セッションが終了するまで記憶されます (SmartCard またはキャッシュ タイムアウトを抽出するとき)。
問題は次のとおりです。これは組み込みアプレットです。WebページAで何かに署名してからWebページBに移動すると(リンクまたはリダイレクトなどを介して)、アプレットが破棄/作成され(JVMと同様)、セッションが失われるため、導入する必要があります再びPIN。もちろん、実際のWebページを離れたりリロードしたりしないと、これは起こりません。
質問: セッション/アプレット/JVM をプログラムで再利用する方法はありますか? または、この問題を回避できる方法でキーストアをロードしますか?
私がすでに知っている可能な回避策:
- フリーフローティングアプレット。できません。GUI がなく、JS と通信する必要があります...
- フレームセット/iframe 内の Web。汚れた。
- Web を Ajax 化します (1 ページのみ + Ajax でのすべての操作 + ある種の履歴 JS プラグインまたは PushState)。これは私が気に入っているソリューションですが、リファクタリングが必要です。