ssl - 在 java (JSSE API) 中使用现有的 SSL key /证书对配置 SSLContext

标签 ssl public-key-encryption public-key jsse

我正在开发一个 Java 项目,我应该在该项目中在服务器端实现 SSL 协议(protocol)。这是我第一次在我的应用程序中使用 SSL,所以我阅读了很多关于 SSL/TLS 的内容,现在我想用 Java 实现一些东西。我将使用 JSSE API 实现这个过程:

  1. 客户端将连接到我

  2. 我将使用我的公钥证书进行身份验证。我的意思是我会发给客户端一个公钥和对应的证书

  3. 客户端使用我的公钥和 RSA 算法加密 key 并将其发送给我

我已经将私钥和证书保存在我计算机上的 keystore 中。所以我很犹豫如何从我的 Java 应用程序访问它们。我不知道访问它们需要执行哪些步骤,因为这是我第一次处理此类问题

我将使用 SSLEngine。所以我应该首先使用这段代码初始化一个 SSLContext:

// First initialize the key and trust material.
KeyStore ksKeys = KeyStore.getInstance("JKS");
ksKeys.load(new FileInputStream("/.../myKey"), passphrase);
KeyStore ksTrust = KeyStore.getInstance("JKS");
ksTrust.load(new FileInputStream("/../myCertificate"), passphrase);

sslContext = SSLContext.getInstance("TLS");
sslContext.init( kmf.getKeyManagers(), tmf.getTrustManagers(), null);
// We're ready for the engine.
SSLEngine engine = sslContext.createSSLengine(hostname, port);

// Use as client
engine.setUseClientMode(true);

我对密码学真的很陌生,这是我第一次编写这些东西。有什么想法吗?

最佳答案

在服务器上,公钥及其证书与原始私钥一起进入 KeyStore,所有这些都在同一个别名下。

如果证书是自签名的,您需要将其从那里导出到客户端的信任库中。

您不需要为此编写代码。只需设置系统属性:

javax.net.ssl.keyStore
javax.net.ssl.keyStorePassword
javax.net.ssl.trustStore

视情况而定。

关于ssl - 在 java (JSSE API) 中使用现有的 SSL key /证书对配置 SSLContext,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32433832/

相关文章:

java - SSL 握手警报 : unrecognized_name error since upgrade to Java 1. 7.0

java - 执行公钥加密背后的数学运算

java - 在 native java (7+) 中从字节数组私钥生成 EC 公钥

amazon-web-services - 如何使用公共(public)IP获取Windows Server的SSL证书?

javax.net.ssl.SSLException : java. lang.RuntimeException:无法生成 DH key 对

c# - .NET Core 2.0 Crypto 示例不工作 - 错误 Cng v4.3 使用高于引用算法 v4.2 的算法 v4.3

javascript - 通过 http 保护 POSTED 数据的最佳方法?

ssh - WinSCP 命令行 : Hostkey not found in cache error

windows - 私有(private) Git 服务器不可见或无法访问

c# - C#/.Net 中的 SSL MaxFragmentLength 扩展