PKIサーバーを展開し、ECCベースのユーザーまたはクライアント証明書を正常に生成できました。しかし、Webブラウザー以外では、公開鍵としてECCをサポートしています。私はさまざまなツールを試し、opensslを介してMS CAPIでこれを操作しようとしましたが、成功しませんでした。
一部の人は、ECCベースのユーザー証明書をキーストアにインポートするのに役立つ、任意のWebブラウザー用のユーティリティを推奨できますか?
またはこれをサポートできるライブラリはありますか?これが私の証明書です。
/ ejbca/p12/pem#
openssl x509 -in testp256.pem -noout -text
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 5786377012642498827 (0x504d573c470ac90b)
Signature Algorithm: ecdsa-with-SHA256
Issuer: CN=ECCP-256, OU=admin, O=test
Validity
Not Before: Aug 23 13:32:42 2013 GMT
Not After : Aug 23 13:32:42 2015 GMT
Subject: CN=testp256
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:81:65:b4:c1:f4:95:7f:68:46:80:f2:42:5b:bf:
87:84:0a:98:42:3d:0a:e8:70:5c:e4:b3:4e:d7:29:
71:af:ce:c5:b3:fe:fd:02:2a:f3:bd:83:f7:50:23:
d1:75:af:dd:23:1f:be:62:a7:7a:d0:e2:be:03:c2:
e3:18:89:21:f4
ASN1 OID: prime256v1
X509v3 extensions:
X509v3 Subject Key Identifier:
D7:27:DD:14:F1:42:0E:9C:E3:50:E1:D1:33:20:8A:53:DE:F2:14:14
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Authority Key Identifier:
keyid:EA:55:E0:24:6F:EA:9E:3C:63:FD:FF:AA:A6:DC:31:1F:F0:1C:FB:F7
X509v3 Key Usage: critical
Digital Signature, Non Repudiation, Key Encipherment
X509v3 Extended Key Usage:
TLS Web Client Authentication, E-mail Protection
Signature Algorithm: ecdsa-with-SHA256
30:45:02:20:08:1b:44:e0:9b:ab:3c:9e:f6:e3:ef:28:d4:1e:
cd:08:f4:1a:f5:21:c8:9f:e6:e0:6c:5e:7f:52:d0:47:a5:bf:
02:21:00:ce:1a:58:57:f1:6b:82:5f:f2:72:af:ea:95:a3:05:
02:ab:63:bf:13:fe:98:c2:0e:c2:a5:d3:d9:b9:74:77:6a
今朝、Firefox(バージョン26、MacOS Xの場合)、Safari(6.1.1、MacOS X 10.7.5の場合)、およびChrome(31.0.1650.63 、MacOS X 10.7.5の場合)ChromeとSafariはどちらも、KeyChainで管理されるMacOSのX.509証明書のサポートに依存しています。
私のすべてのテストでは、P-256カーブのECキーを使用します。これは(証明書内で)「名前付きカーブ」エンコーディングを使用します。すべての証明書はOpenSSLで生成され、表示されているものと一致します。特に、証明書の拡張は問題なく、RSAベースの証明書で問題なく機能します。
KeyChainは、ECDSA公開鍵を特徴とする証明書のインポートを拒否します。 errSecInvalidKeyRef
、つまり「無効なキーが見つかりました。」にマップされるエラー「-67712」を返します。 このリファレンスページ を参照してください。興味深いことに、KeyChainはMacOS X 10.7以降のECDSAキーの存在を認識しているはずですが、これはECDSAキーを含むまたはECDSAで署名されたX.509証明書の完全サポートに浸透していないようです。
Firefoxは [〜#〜] nss [〜#〜] と呼ばれる独自の暗号化コードを使用します。これにはX.509サポートが含まれます。楕円曲線暗号のサポートはNSSの新機能であり、さらに重要なことはオプションであるため、その存在はビルド時にアクティブ化されたかどうかによって異なります。 これらのメッセージ は、少なくともRedHatがECCサポートなしでFirefox/NSSをビルドしていることを示しています。
私のテストでは、Firefox( 公式ソース から入手したMacOS Xバージョン)がtryを受け入れて、ECC付きで証明書をインポートしますが、結果はさまざまです。 ECDSAの証明書signedは多少壊れます。 FirefoxのGUIは、証明書を表示するときに、「不明な理由で証明書を検証できない」と主張します。 Firefoxは以下で失敗します:
Firefox、Safari、およびChromeは、秘密鍵がECDSAタイプのSSLサーバーに接続して問題ないようです。3つすべてで、証明書がRSAで署名されている必要があります(まだ試していませんただし、DSAの場合)サーバー自体が楕円曲線を使用する場合があり、暗号スイートはECDHE-ECDSA-AES128-GCM-SHA256
(これはChromeを使用)です。これは、キー交換が楕円曲線ベースのDiffie-Hellmanであり、そのECDHキー交換のサーバーの半分は、 ECDSA秘密鍵Chrome TLS 1.2を使用(良好!)、Safariは引き続きTLS 1.0を使用しています(あまり良くはありませんが、悪くない)。
SHA-1をSHA-256またはそれ以降に置き換えると、これらすべてに変更はないため、SHA-256のサポートはついに完了したようです。
OpenSSL 証明書のECキー、証明書の署名、および問題のないクライアントとサーバーをサポートします。私のテストでは、サーバーはOpenSSLであり、s_server
コマンドラインオプション。 openssl s_client
は問題なくサーバーに接続し、ECベースのクライアント証明書を使用できます。
NSSで完全にアクティブ化されたECCサポートを備えたFirefoxのカスタムビルド可能性うまく機能します。いずれの場合でも、「ECCをサポートする」と主張するほとんどのソフトウェアは実際には2つの曲線、P-256とP-384のみをサポートするため(いわゆる 「NSA Suite B暗号化」 )。他の13のNIST曲線( FIPS 186-4 から)のサポートは、はるかに機密性が高くなります。 「ジェネリックカーブ」のサポートはまれです(私は野生でそれを観察したことはありません)。
Internet Explorerの最近のバージョンは、ECDSAを認識しているはずです。 Windowsには、暗号化のためのtwo内部フレームワーク、CryptoAPI(古いもの)、および [〜#〜] cng [〜#〜] があることに注意してください。 CNGのみがECキーをサポートしています。つまり、SHA-256をサポートしています。 CNGはWindows Server 2008とWindows 7に表示されます。最新IEこれらのWindowsバージョンではすべき ECキーを含む両方の証明書を使用できるおよび ECDSAで署名された証明書、両方クライアントとサーバー用です。少なくとも ドキュメント と主張しますが、テストするまで信頼しないでください。
Chrome on WindowsはX.509証明書に関するWindowsの機能に依存するため、ChromeはIEの機能と同等です)同じプラットフォームですが、ここでもテストを実行する必要があります。
実際、EJBCAおよびECC PKCS#12ファイルに問題がありました。 ECCでのキーのエンコードは、「名前付き曲線」と「明示的パラメーター」の2つの異なる方法で実行できます。 EJBCAは明示的なパラメーターを使用しましたが、ブラウザーは名前付き曲線のみをサポートし、名前付き曲線もRFC5915に従って使用する必要があります。
EJBCA 6.0.0のエンコーディングが変更され、今秋後半にリリースされます。この問題は、EJBCAの課題トラッカー https://jira.primekey.se/browse/ECA-3131 で確認できます。 FireFoxでテスト済み。