2016-04-22 8 views
6

鍵をAndroidKeyStoreにインポートしたいと思います。 だから、私は次のようopensslによって生成されたRSA秘密鍵をAndroidKeyStoreにインポートする方法

opensslのRSA -text -in privateKey2048.pem

opensslのPKCS8 -topk8 -inform PEM -in ./privateKey2048.pem -outform DER -outでのopensslことによってそれを生成することができます次いで、Iは、AndroidアプリでのByteArrayに変換することができるHEX形式へprivate2048.derからそれを変換することができ

-nocrypt private2048.der。しかし、私にとって明らかではない このbyteArrayをAndroidKeyStoreにインポートするにはどうすればいいですか?

だから私の質問はどのようにStringやbyteArrayとして存在するKeyStoreキーへのインポートですか?

ps:keyPairGenerator.generateKeyPair()でkeyPairを生成することは可能ですが、キーをインポートしたいと思います。たとえば、opensslで生成し、アプリケーションでハードコードします。

+0

この投稿を参照することができます。http://stackoverflow.com/questions/36688119/import-existing-private-key-into-bks-keystore –

答えて

4

アプリケーションに秘密鍵をハードコードすることはお勧めできません。 このキーは、に感染しています。これは、APKの内容が秘密ではないため、APKからキーを抽出できるためです。あなたがまだこの警告にもかかわらずこれを行う必要があると信じているなら、読んでください。

秘密鍵をAndroidキーストアにインポートするには、PrivateKeyインスタンスとしてそれを表す必要があります。また、X509Certificateインスタンスとして表されるX.509証明書(秘密鍵に対応する公開鍵用)も必要です。これは、JCA KeyStore抽象化では、証明書なしで秘密鍵の格納をサポートしないためです。証明書にPEMまたはDERエンコードされた証明書を変換するには

PrivateKey privateKey = 
    KeyFactory.getInstance("RSA").generatePrivate(
     new PKCS8EncodedKeySpec(privateKeyPkcs8)); 

最後に
Certificate cert = 
    CertificateFactory.getInstance("X.509").generateCertificate(
     new ByteArrayInputStream(pemOrDerEncodedCert)); 

、プライベートをインポートするのPrivateKeyに秘密鍵をエンコードPKCS#8 DERを変換するには

キーと証明書をAndroidキーストアの「myKeyAlias」エントリに追加します。

KeyStore ks = KeyStore.getInstance("AndroidKeyStore"); 
ks.load(null); 
ks.setKeyEntry("myKeyAlias", privateKey, null, new Certificate[] {cert}); 

moを参照してください先進的な例はhttps://developer.android.com/reference/android/security/keystore/KeyProtection.htmlです。

+0

ありがとう、ありがとうございます。 ps:>「秘密鍵をアプリケーションにハードコードするのは良い考えではありません。」はい、私は知っています。 – i716

関連する問題