【问题标题】:How to retrieve keyManager details from SSLContext?如何从 SSLContext 中检索 keyManager 详细信息?
【发布时间】:2021-01-30 23:13:44
【问题描述】:

我想从 sslContext 对象中检索 credentialMap 属于 keyManager。

 public static void main(String[] args) throws UnrecoverableKeyException, CertificateException, NoSuchAlgorithmException, KeyStoreException, IOException, NoSuchProviderException, KeyManagementException {
        SSLContext sslContext = newServerContext(createKeyManagers());
        // how to get keyManager from sslContext?
    }

public static SSLContext newServerContext(KeyManager[] keyManagers)
            throws NoSuchAlgorithmException, NoSuchProviderException,
            KeyManagementException {
        SSLContext ctx = SSLContext.getInstance("TLS");
        ctx.init(keyManagers, null, new SecureRandom());
        return ctx;
    }

public static KeyManager[] createKeyManagers()
            throws KeyStoreException, IOException, NoSuchAlgorithmException,
            CertificateException, UnrecoverableKeyException
    {
        KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
        FileInputStream keyStoreFile = new FileInputStream("F:\\IdeaProjects\\NewFeature\\keystore.jks");
        String keyStorePassword = "changeit";
        keyStore.load(keyStoreFile, keyStorePassword.toCharArray());

        KeyManagerFactory kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
        kmf.init(keyStore, keyStorePassword.toCharArray());
        return kmf.getKeyManagers();
    }

如何从 ctx(SSLContext) 对象中检索 keyManager 详细信息?

【问题讨论】:

    标签: java keystore truststore java-security sslcontext


    【解决方案1】:

    您似乎无法通过SSLContext 的某些方法获取KeyManager 数组。为什么不将KeyManager 数组保存在变量中?

    KeyManager[] keyManagers = createKeyManagers();
    SSLContext sslContext = newServerContext(keyManagers);
    

    对了,为什么要通过SSLContext获取KeyManager[]?你打算用它做什么?你打算在哪里使用它? SSLContext 充当安全套接字工厂或 SSLEngines 的工厂。 KeyManager 应该由SSLServerSocketFactorySSLEngine 在内部使用。

    【讨论】:

    • 谢谢杰里米!它是测试用例所必需的,当我从一个类中获取 SSLContext 并想检查它的客户端别名时,该别名在 keyManager credentialMap 中可用。那么,正如您所说,无论如何都不可能?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 1970-01-01
    • 1970-01-01
    • 2018-05-21
    • 2015-05-31
    • 2018-03-17
    相关资源
    最近更新 更多