web-dev-qa-db-ja.com

JavaScriptを使用してブラウザのキーストアで署名/暗号化にアクセスする-サンプルコード? (WebCryptoAPI)

X509認証のみを使用してアクセスを許可するWebサーバーがあります。チャームのように機能します。ここで、X509証明書(ユーザーのブラウザーのキーストアに格納されている)の使用を次のように拡張したいと思います。

  • サーバーに送信する前にデータに署名します(JavaScriptとHTTPPostを使用)
  • サーバーから読み取られたデータを復号化します(サーバーに保存されているユーザーの公開鍵を使用して暗号化されます)

私はこの例が RSA署名 を実行しているのを見つけました。これはかなり近いです....それだけがHTMLテキストエリアからキーを取得します。鍵屋から読みたいです。現在、暗号はかなり流動的です:

署名と暗号化の実用的な例をいくつか探しています(Javaにはいくつかありますが、ブラウザーベースのJavaScriptにはありません)。

ヘルプは非常に高く評価されています

14
stwissel

現在、W3CのWebCrypto標準は、javascriptを使用して暗号化、デジタル署名、キーの生成などを実行するために、crypto内にjavascriptオブジェクトwindowを指定しています。ただし、ローカルキーストアにアクセスしてクライアントキーを使用した署名などの操作を実行する標準的な方法は定義されていません。そのため、現在、JavaScriptでこれを行う一般的な方法はありません。各ブラウザーには、独自の方法があります。 IE ActiveXObject("CAPICOM.Store");で、firefoxでwindow.crypto.signText("textToSign", "ask");を使用して実行できます(現在は非推奨になっているようです。見てください ここ 、実際のAPIはそれをサポートしていないようです: 詳細はこちら )、for chromeしかし、使用しているかどうかはわかりません NativeSDKクライアント 可能な方法である可能性があります。

他の可能性もJavaアプレットを使用しており、このテクノロジーが最近抱えているすべての問題を抱えています。

両方の実装を持つ共通のオブジェクトを使用して署名する動作(IEとfirefoxのみ))をjavascriptにカプセル化するプロジェクトもgithubにあります。数か月前に試して、正しく動作します。 IE/Firefoxは、APIオプションが非推奨になっているため、Firefoxでは機能しません。興味がある場合は、以下を参照してください。 Glamdring/js-signer

同様の質問をした私の質問を確認することもできます: js署名chrome with OS keystore

お役に立てれば、

14
albciff

ブラウザ内の「ローカルキーストア」にアクセスすることはできません。ブラウザは、ブラウザによって適用される同一生成元ポリシーに違反するものへのアクセスを徐々に削除します。これには、プラグイン、keygenタグなどが含まれます。

PKIjsは、同一生成元ポリシーPKIを念頭に置いて構築されました。これは、そのトピックについて私が行った投稿です- https://unmitigatedrisk.com/?p=5

2
rmhrisk

GlobalSign/PKI.js X.509証明書をサポートしています。

公開鍵インフラストラクチャ(PKI)は、今日のWebでIDと鍵の管理がどのように実行されるかの基盤です。 PKIjsは、PKIアプリケーションで使用される形式を実装する純粋なJavaScriptライブラリです。これはWebCrypto(Web Cryptography API)に基づいて構築されており、プラグインなしでX.509および関連する形式をWeb上で利用するネイティブWebアプリケーションの構築を可能にすることを目指しています。

1
Kevin Hakanson