【问题标题】:Server and Client SSL certificates with the same public key具有相同公钥的服务器和客户端 SSL 证书
【发布时间】:2018-11-20 17:34:18
【问题描述】:
我想在基于 Java 的应用程序(客户端和服务器架构)中保护套接字通信。我想在 SSL 的帮助下实现这一点。
根据我的研究,我需要一个 SSL 证书(一对私钥和公钥)。我必须知道如何使用 Bouncy Castle 库生成证书。
我的问题是:
- 我的假设是,在服务器端,证书必须同时包含私钥和公钥,而在客户端,证书必须只包含服务器的公钥。这是正确的吗?
- 如果上述理解正确,我应该如何生成两个证书,一个用于服务器同时使用公钥和私钥
另一个只通过公钥供客户使用。
有人可以给我一些指导吗?
【问题讨论】:
标签:
java
ssl
bouncycastle
public-key-encryption
jce
【解决方案1】:
网上有几个资源很好地解释了公钥加密的工作原理。通常,您的服务器有两种资源:私钥和证书。公钥包含在证书中。通常私钥受密码保护,因此您的服务器也需要密码。
证书在连接时发送给客户端;但客户需要信任它。为此,证书需要由受信任的权威机构签署,或者您需要在客户端显式信任该证书(后一种情况称为自签名证书)。
Bouncy castle 是用于此类事物的库,但您可以使用任何东西来创建您的密钥对。最明显的一个是keytool,它来自哪个java。 read up on generating your keypair here.