我来自“C”背景。我正在尝试分析如何编写 Java SSL Server。
因此,到目前为止,我发现的示例都在讨论加载证书和私有密钥存储以及以编程方式将 KeyStore 关联到 SSLContext,然后从相同创建 SSLServerSocket。
但是,有什么方法可以直接提到 SSLServerSocket 应该使用哪个证书?此外,即使我使用密钥库并且如果有多个证书和密钥,我如何向 SSLServerSocket 指定它应该使用哪一个?
任何示例链接都会有所帮助。
我来自“C”背景。我正在尝试分析如何编写 Java SSL Server。
因此,到目前为止,我发现的示例都在讨论加载证书和私有密钥存储以及以编程方式将 KeyStore 关联到 SSLContext,然后从相同创建 SSLServerSocket。
但是,有什么方法可以直接提到 SSLServerSocket 应该使用哪个证书?此外,即使我使用密钥库并且如果有多个证书和密钥,我如何向 SSLServerSocket 指定它应该使用哪一个?
任何示例链接都会有所帮助。
正如我在评论中所说,在回答您之前的一个问题时,您需要使用 aKeyManager
来执行此操作。
有多种方法可以做到这一点。jSSLutils是一个库,可以使它更方便一些(但您也可以更手动地完成它)。FixedServerAliasKeyManager有一个示例。最短的方法之一是使用这样的东西:
X509SSLContextFactory sslContextFactory = new X509SSLContextFactory();
// By default, this would use the keystore passed with the usual system properties.
sslContextFactory.setKeyManagerWrapper(
new FixedServerAliasKeyManager.Wrapper("the-alias-you-want"));
// You could read the alias name from a custom system property, for example.
SSLContext sslContext = sslContextFactory.buildSSLContext("TLS");
SSLServerSocketFactory sslServerSocketFactory = sslContext.getServerSocketFactory();