3

我们正在使用小程序进行加密解密。我们发现数字证书存在一些意想不到的问题。一个系统有证书,我们无法从该证书中找到私钥,但通过安装相同的证书再次工作正常。

Java Plug-in 10.25.2.17
Using JRE version 1.7.0_25-b17 Java HotSpot(TM) 64-Bit Server VM
User home directory = C:\Users\admin

要访问私钥,我们使用以下代码。

private PrivateKey getPrivateKeyFromKeyStore(String pubkey, KeyStore browser) {
        PrivateKey privateKey = null;
        String pubKey1 = "";
        if (browser != null) {
            try {
                Field spiField = KeyStore.class.getDeclaredField("keyStoreSpi");
                spiField.setAccessible(true);
                KeyStoreSpi spi = (KeyStoreSpi) spiField.get(browser);
                Field entriesField = spi.getClass().getSuperclass().getDeclaredField("entries");
                entriesField.setAccessible(true);
                @SuppressWarnings("rawtypes")
                Collection entries = (Collection) entriesField.get(spi);
                for (Object entry : entries) {
                    String alias = (String) invokeGetter(entry, "getAlias");
                    X509Certificate[] certificateChain = (X509Certificate[]) invokeGetter(entry, "getCertificateChain");
                    for (X509Certificate current : certificateChain) {
                        pubKey1 = this.bASE64Encoder.encode(current.getPublicKey().getEncoded());
                        if (pubkey.equals(pubKey1) && !pubkey.equals("")) {
                            privateKey = (PrivateKey) invokeGetter(entry, "getPrivateKey");
                            return privateKey;
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
        }
        return privateKey;
    }
4

1 回答 1

0

您不会在证书中找到私钥,因为它必须在您的密钥库中,当然,如果您使用其CSR生成证书:)

作为提示,我可能会问证书是否已过期?

无论如何,这个问题很不清楚:(如果你有证书,你必须有用于签署你的应用程序的密钥库......最好你提供更多细节......

于 2013-12-21T01:57:16.913 回答