1

keyPair を作成してから、Web Crypto API を使用して keyPair からキーをエクスポートしています。

var log = console.log.bind(console);

var subtleCrypto = null;
if ( window.crypto ) {
    subtleCrypto = window.crypto.subtle || window.crypto.webkitSubtle;
}
if ( window.msCrypto ) {
    subtleCrypto = window.msCrypto.subtle
}

subtleCrypto.generateKey(
    {
        name: "RSASSA-PKCS1-v1_5",
        modulusLength: 2048,
        publicExponent: new Uint8Array([1, 0, 1]),  // 24 bit representation of 65537
        hash: {name: "SHA-256"}
    },
    true, // can extract it later if we want
    ["sign", "verify"]
).then(function(keyPair){
    log('Exporting from keyPair', keyPair)
    subtleCrypto.exportKey('pkcs8', keyPair.privateKey).then(function(pkcs8) {
        log('Exported keypair!', pkcs8)
    }, function(reason) {
        log('Couldnt export keypair', reason)
    })
}, function(reason){
    log('could not generate key', reason)
})

Chrome と Firefox では、コードは正常に動作し、次のように出力されます。

 "Exporting from keyPair" Object { privateKey: CryptoKey, publicKey: CryptoKey }
 "Exported keypair!" ArrayBuffer { byteLength: 1218 }

ただし、Safariでは失敗し、印刷のみ:

 Exporting from keyPair KeyPair 

そして、何もしません。Safari でキーをエクスポートするにはどうすればよいですか?

4

2 に答える 2

3

Webkit は現在、キーを 'pkcs8' または 'spki' としてエクスポートすることはできません (個人的に発見され、https: //bugs.webkit.org/show_bug.cgi?id=129978 で確認されているように)。

これを回避する方法は、「jwk」としてエクスポートし、さまざまな部分を抽出して ASN.1 でエンコードすることにより、結果のキーを変換することです。これを行う方法の例は、webcrypto-shim プロジェクトで見つけることができます。これを使用するだけで、自分で行う必要はありませんが、Webkit の RSA-OAEP + SHA-256 または AES-GCM では機能しません。 .

于 2015-11-21T14:20:37.517 に答える
0

現在、WebCrypto の Safari 実装と Edge 実装には多くの問題があります。

このため、これらの違いを隠すこのライブラリを実装しました。ここで見つけることができます: https://github.com/PeculiarVentures/webcrypto-liner/blob/master/BrowserSupport.md

この特定のケースでは、以前の回答で、Safari は PKCS8 フォーマットを実装していないと述べていました。

PKCS8 形式が必要な場合は、この関数を参照してください: https://github.com/PeculiarVentures/pkijs-es6/blob/62bbedea4cd3b60debbdc309bc48b5c188f4504e/src/CryptoEngine.js#L438-L532

于 2016-12-09T07:14:58.130 に答える