在密钥库中保存带有证书的私钥 - Android

时间:2017-04-22 13:31:07

标签: android ssl x509certificate self-signed android-keystore

我已经解决了这个问题,但无法弄清楚我们为什么需要它。我创建了一个自签名的SSL证书,并在我的Android设备上进行测试。我已将其存储在keystore中,并将其用作

String keyStoreType = KeyStore.getDefaultType();
        KeyStore keyStore = KeyStore.getInstance(keyStoreType);
        keyStore.load(context.getAssets().open("self.jks"), "password".toCharArray());


        String tmfAlgorithm = TrustManagerFactory.getDefaultAlgorithm();
        TrustManagerFactory tmf = TrustManagerFactory.getInstance(tmfAlgorithm);
        tmf.init(keyStore);

它工作正常,即我从服务器得到正确的响应。我的密钥库看起来像这样

Keystore type: BKS
Keystore provider: BC

Your keystore contains 1 entry

Alias name: ca
Creation date: Apr 22, 2017
Entry type: trustedCertEntry

Owner: CN=92.168.10.11,E=email@gmail.com,O=Self,L=Islamabad,C=PK
Issuer: CN=92.168.10.11,E=email@gmail.com,O=Self,L=Islamabad,C=PK
Serial number: f2b8e66caa28f0da
Valid from: Tue Apr 18 19:29:45 PKT 2017 until: Wed Apr 18 19:29:45 PKT 2018
Certificate fingerprints:
     MD5:  2A:46:42:A8:7B:10:21:19:5F:B0:E2:A8:A1:BF:76:D3
     SHA1: 6A:18:AE:C7:4A:46:77:23:63:6B:8F:B8:40:46:49:47:67:30:5A:D5
     SHA256: B9:83:1A:D7:92:72:77:C2:88:AE:37:34:B4:70:31:94:C4:4E:03:7E:23:96:63:0C:00:E4:7F:35:B9:67:12:97
     Signature algorithm name: SHA256WithRSAEncryption
     Version: 1


*******************************************
*******************************************

虽然我所关注的书有如下关键词

Alias name: asynchronous_client
Entry type: PrivateKeyEntry
Certificate[1]:
Owner: C=UK,ST=Birmingham,L=Birmingham,O=Packt Publishing,OU=Packt
Publishing,CN=asynchronous_client
Issuer: C=UK,…,CN=packt
Certificate[2]:
Owner: C=UK,…,CN=packt
Alias name: ca
Entry type: trustedCertEntry
Owner: C=UK,…,CN=packt
Issuer: C=UK,…,CN=packt

他们同时拥有私钥证书。我想知道

  

如果一切正常,没有它,为什么他们需要私钥呢?   如果我们确实需要它,它将如何在SSL握手中使用?

1 个答案:

答案 0 :(得分:1)

  

如果一切正常,没有它,为什么他们需要私钥呢?如果我们确实需要它,它将如何在SSL握手中使用?

客户端不需要服务器私钥来执行SSL握手。这不仅是不必要的,而且是安全问题,因为如果服务器以外的任何人都拥有密钥的副本,则可以代表服务器行事,例如,一个中间人。私钥不应该与其所有者的其他任何人一起使用。

在这种情况下,您应该仅向客户端提供服务器证书(或包含它的密钥库)。