汎用ブラウザ (http(s) を介してサーバーに接続) から、できれば Javascript からローカル スマート カードにアクセスし、エンド ユーザーのインストールの手間を最小限に抑えるクライアント側のアーキテクチャは何ですか? サーバーは少なくとも、選択した APDU をカードに発行できる必要があります (または、サーバーが生成するクライアント側コードにその一部を委任することもできます)。私は、スマート カード リーダーを備えた動作中の PC/SC スタックのクライアント側での可用性を想定しています。これは、少なくとも Windows XP 以降、最新の OS X、および Unix では妥当な仮定です。
これまでのところ、次のオプションを特定しました。
- 一部のカスタム ActiveX。これは私の既存のアプリケーションが使用しているものです (社内で開発しました)。IE を使用しているクライアントは、ActiveX をインストールする許可を得れば、展開は非常に簡単ですが、「汎用ブラウザー」の要件には適合しません。
更新: ActiveX は、ほとんどの場合、IE11 を含む非推奨の IE でサポートされています。エッジではありません。 - 上記のスムーズな拡張のように見える、Netscape Plugin API を使用した PC/SC ブラウザ拡張。私が見つけた唯一の既製のものはSConnect (webarchive)です。もはや宣伝されておらず (更新: 少なくとも1 つのアプリケーションで 2020 年後半に引き続き積極的に維持および使用されていると考えられています)、その APIドキュメント (webarchive)は公式には利用できなくなり、特定のスマート カードおよびリーダー ベンダーとの強い結びつきがあります。原則は素晴らしいかもしれませんが、すべてのプラットフォームにそのようなプラグインを作成するのは大変な作業です。
更新: NPAPI サポートは、Chrome や Firefox を含む多くのブラウザーで削除されています。 - Oracle の JVM (1.)6 以上で実行される Java アプレット
javax.smartcardio
。それは機能的な観点からは問題なく、十分に文書化されており、いくつかの既知のバグに耐えることができますが、Java-as-a-browser-extension の受け入れに関して、たまらなく下向きのスパイラルになることを恐れています。 - [更新、2021 年 2 月]: この回答は、2015 年に WebUSB API を有望なソリューション ソリューションと見なし、2019 年に機能しないか放棄されたと報告しました。そこで質問しました。
他のアイデアはありますか?
また、不正なサーバーによるブラウザの PC/SC インターフェースの悪用を防ぐ方法はありますか (たとえば、カードをブロックするために 3 つの間違った PIN を提示する、カードを不快にするため、またはさらに邪悪なものを作成するなど)。