我正在开发一个 Java 项目,我应该在该项目中在服务器端实现 SSL 协议(protocol)。这是我第一次在我的应用程序中使用 SSL,所以我阅读了很多关于 SSL/TLS 的内容,现在我想用 Java 实现一些东西。我将使用 JSSE API 实现这个过程:
客户端将连接到我
我将使用我的公钥证书进行身份验证。我的意思是我会发给客户端一个公钥和对应的证书
客户端使用我的公钥和 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/