59

汎用ブラウザ (http(s) を介してサーバーに接続) から、できれば Javascript からローカル スマート カードにアクセスし、エンド ユーザーのインストールの手間を最小限に抑えるクライアント側のアーキテクチャは何ですか? サーバーは少なくとも、選択した APDU をカードに発行できる必要があります (または、サーバーが生成するクライアント側コードにその一部を委任することもできます)。私は、スマート カード リーダーを備えた動作中の PC/SC スタックのクライアント側での可用性を想定しています。これは、少なくとも Windows XP 以降、最新の OS X、および Unix では妥当な仮定です。

これまでのところ、次のオプションを特定しました。

  1. 一部のカスタム ActiveX。これは私の既存のアプリケーションが使用しているものです (社内で開発しました)。IE を使用しているクライアントは、ActiveX をインストールする許可を得れば、展開は非常に簡単ですが、「汎用ブラウザー」の要件には適合しません。
    更新: ActiveX は、ほとんどの場合、IE11 を含む非推奨の IE でサポートされています。エッジではありません。
  2. 上記のスムーズな拡張のように見える、Netscape Plugin API を使用した PC/SC ブラウザ拡張。私が見つけた唯一の既製のものはSConnect (webarchive)です。もはや宣伝されておらず (更新: 少なくとも1 つのアプリケーションで 2020 年後半に引き続き積極的に維持および使用されていると考えられています)、その APIドキュメント (webarchive)は公式には利用できなくなり、特定のスマート カードおよびリーダー ベンダーとの強い結びつきがあります。原則は素晴らしいかもしれませんが、すべてのプラットフォームにそのようなプラグインを作成するのは大変な作業です。
    更新: NPAPI サポートは、Chrome や Firefox を含む多くのブラウザーで削除されています。
  3. Oracle の JVM (1.)6 以上で実行される Java アプレットjavax.smartcardio。それは機能的な観点からは問題なく、十分に文書化されており、いくつかの既知のバグに耐えることができますが、Java-as-a-browser-extension の受け入れに関して、たまらなく下向きのスパイラルになることを恐れています。
  4. [更新、2021 年 2 月]: この回答は、2015 年に WebUSB API を有望なソリューション ソリューションと見なし、2019 年に機能しないか放棄されたと報告しました。そこで質問しまし

他のアイデアはありますか?

また、不正なサーバーによるブラウザの PC/SC インターフェースの悪用を防ぐ方法はありますか (たとえば、カードをブロックするために 3 つの間違った PIN を提示する、カードを不快にするため、またはさらに邪悪なものを作成するなど)。

4

10 に答える 10

27

実際には、ブラウザーは SSL を確立する以外の目的で (暗号化) スマート カードと対話することはできません。

スマート カードにアクセスするには、ブラウザによって実行される追加のコードが必要です。

少なくともヨーロッパでは標準的または普遍的に受け入れられている方法がないため、さまざまな目的(署名が最も人気があると思います)のために(あなたが言及した3つのオプションすべてを使用して)カスタムおよび独自のプラグインが数十あります。同じように。

ブラウザは毎月リリースされ、新しいリリースごとにサンボックスや UI トリックが変更されるため、独自のブラウザを作成、配布、維持するのは大変なことです。そのため、頻繁にコードを調整する必要があるかもしれません。

また、少なくともカードやカード上の機能にアクセスする許可をユーザーに求めるために、GUI 機能が必要になるでしょう。

複数のプラットフォーム、複数のブラウザー プラグインを作成するには、firebreathなどを使用できます。

個人的には、PC/SC を Web に公開することは良いことだとは思いません。PC/SC は本質的に非常に低レベルのプロトコルであるため、これを公開する場合は、ディスクへのブロック レベルのアクセスを公開し、「Web 上のアプリケーションは私だけのものであり、適切に動作する」ことを期待できます (これは、「また、 」)。同時に、javascript plugin.sendAPDU() スタイルのコードを提供するために、SConnect のような薄い shim を作成するのが最も簡単です (または、すべての PC/SC API をラップして、javascript 呼び出し元に同じレベルの詳細を処理させます)。ネイティブの PC/SC API ユース ケースと同様)。

この目的のためのプラグインの作成は、通常、深刻な電流不足によって引き起こされます。

将来 (モバイルなど) に対処することは別の話です。W3C webcryptoや OpenMobile API のようなものが、最終的にクライアント側のキー コンテナーを Web アプリケーションに公開する何かを作成する可能性があります。スマート カードのターゲットが暗号化である場合、私の提案は PC/SC を避け、プラットフォーム サービス (Windows では CryptoAPI、OSX では Keychain、Linux では PKCS#11) を使用することです。

どのようなデザインにも要件があります。任意の APDU ではなくキーを使用することを考えている場合、これはすべて当てはまります。任意の APDU を送信する必要がある場合は、プラグインを作成して、そのまま使用してください。

于 2013-04-07T07:40:14.040 に答える
7

この問題に対処するベータ プラグインをリリースしました。このベータ コードは、次の場所から入手できます。

https://github.com/ubinity/webpcsc-firebreath

このプラグインは firebreath フレームワークに基づいており、Linux/WinXP/Win7 で Fireofx および Chrome でベータ テストされています。ソースコードと拡張パックが提供されます。

基本的な考え方は、PCSLite API アクセスを提供し、その上でより使いやすい JS-api を開発することです。

このプラグインは現在開発中ですので、ご報告やご要望がございましたらお気軽にお送りください。

于 2013-06-03T09:06:03.997 に答える
4

There is another browser plugin similar to the one proposed by @cslashm available at http://github.com/cardid/WebCard. Is also open source and can be installed with "minimum installation hassle" as required in the original question. You can see an example of use visiting http://plugin.cardid.org

WebCard has been tested in IE 8 through 11, Chrome and Firefox in Windows and in Chrome and Safari in Mac OS X. Since is just a wrapper for PC/SC it requires in Mac OS X the installation of SmartCard Services from http://smartcardservices.macosforge.com

于 2014-11-16T14:59:09.197 に答える
4

あなたの最初の質問については、ほとんど希望がありません。スマート カード機能の非常に小さなサブセット (電子メールや PDF への署名など​​) に満足している場合は、既製のソフトウェア (PKCS など) を使用することができます。スマートカード会社、またはより幅広い機能が必要で、独自にかなりの労力を費やす必要があります。確かに PCSC は選択の出発点です。

少なくともあなたの「また:」には希望があります。

1) 一部の仕様 (ICAO/German BSI TR-3110 など) では、PIN がブロックされていないメソッドが要求されていますが、エラー カウンターが 1 になるとすぐに応答するまでにかなりの時間がかかることに注意してください。別のコマンドを使用して最後の試行を有効にする必要があります。そうしないと、それ以上の比較とエラー カウンターの調整は行われません。

2) 安全なメッセージングを要求することで、単純に検証コマンドを保護します。機密性の高いアプリケーションはすべてに安全なメッセージングを使用するため、最初のステップでセッション キーがネゴシエートされ、2 番目に後続のすべてのコマンドと応答に適用されます。その結果、エラー カウンタの比較または変更が行われるずっと前に、MAC が正しくないためにコマンドが拒否されます。

于 2013-04-04T12:54:42.717 に答える
2

chrome と firefox が NPAPI プラグインのサポートを停止するため、カードの証明書が相互 SSL をサポートする代わりに、スマート カードの読み取り用のセッションを維持するために利用できる安全なソリューションはありません。ヘルプ

于 2015-12-27T18:19:19.330 に答える
1

ダーティですが、ブリッジ デーモン/サービスをクライアント マシンにインストールすることが許容される/実行可能である場合は、REST インターフェイスを介してスマートカードを公開するローカル ブリッジ サービスを (たとえば、python / pyscard で) 作成し、javascript をそのローカル サービス (ファサード) とリモート サーバー API の間を仲介するブラウザー。

于 2016-05-24T13:09:51.233 に答える
1

Chrome について言えば、Google が提供する PC/SC-Lite ポートと汎用 CCID ドライバーをバンドルしたSmart Card Connector アプリを使用できるようになりました。

アプリ自体は、以前のコメント投稿者が言及したchrome.usb APIを介して動作します。

そのため、開発者はスタック全体を (最下位レベル (生の USB) から開始) 書き直す代わりに、コネクタ アプリによって公開される PC/SC API の上で動作する部分のみをコーディングできるようになりました。

于 2016-07-18T17:27:23.800 に答える
0

ユーザーをログインするためにスマートカード リーダーをスキャンするセットアップがあります。PC/SC ライブラリはデスクトップでうまく機能します。誰かが、 C++ を JavaScript コードにコンパイルする Emscripten ( https://github.com/kripken/emscripten ) コンパイラの使用について言及していました。しかし、PC/SC で使用されている一部の機能はサーバー側でしか使用できないため、うまくいきませんでした。多くの研究の後。私は最終的にクライアント側のソリューションをあきらめました.Chrome Web USB APIもリーダーを認識できませんでした。
次に、signalR を試して、スマートカード リーダーに接続された PC にハブをセットアップすることにしました。このアプローチは非常にうまくいきました。

于 2018-02-15T02:25:39.210 に答える