将证书导入到Spring中的问题
问题描述:
我想访问服务器的REST端点,例如xyz.com。他们提供了PEM格式的证书,我应该在连接到他们的终端时将其包含在我的应用程序中。将证书导入到Spring中的问题
我的应用程序是在Spring Framework上编写的,我需要将PEM转换为P12格式,因为Spring将不接受PEM。这是我怎么转换:的
openssl pkcs12 -export -out certificate.p12 -inkey private.pem -in server_cert.pem
其中,
certificate.p12 =结果P12文件
private.pem =私钥
server_cert.pem =证书文件服务器
我得到的错误是:
没有证书与私钥匹配。
现在我的问题:
- 谁的私有密钥应该被用来产生从PEM文件P12文件?
- 如果客户端的私钥用于生成p12,它怎么可能与证书匹配(错误信息变得明显)?
- 为什么我需要我的私钥与服务器通信?根据我的理解,在SSL会话期间,客户端的私钥不会出现在图片中。或者我的理解错了?
- 如果使用服务器的私钥生成p12,他们为什么要共享它?
我是新手,因此欢迎任何链接/建议阅读/资源/答案。
答
如果您怎么看待client-authentication的作品,在“谈判阶段”,从最后一个点的第二个说:
客户端发送一个CertificateVerify消息,这是比上签名使用客户端证书的私钥握手消息。可以使用客户端证书的公钥来验证此签名。这让服务器知道客户端可以访问证书的私钥并拥有证书。
因此,要回答你的问题:
- 您应该使用这是给你的私钥。
- A PKCS12是一种Java KeyStore,它类似于标准的JKS。它可以包含密钥对的列表。但是PKCS12的因特网标准是只有密钥对条目,即1个私钥和其相关的证书链。由于私钥和证书链是作为单独的实体提供给您的,因此您应该自己构建PKCS12,您将在代码中使用它来向提供服务的服务器验证客户端的身份。
- 如果您查看握手协议级别的握手步骤,您应该看到客户端的私钥(您的私钥)用于签署一些数据并发送到服务器,服务器将在其中进行验证基于您的公钥的消息的真实性。一旦服务器验证了消息,它就会得出你拥有私钥的结论。
- 您将不会被授予服务器私钥。你会得到你的(用户)私钥,这是你守护它的,不应该给任何人的。
在使用私钥和证书链进行p12构建时,可能会有某些缺失或微不足道的错误,这会导致失败。如果不能解决问题,你也可以通过编程方式使用KeyStore
API构建p12。
你从哪里得到你的'server_cert.pem'?当您获得用于连接服务器的私钥时,您还应该获得签名证书。从这个文件的名字看来,你使用的是server_cert.pem,我假设它只包含服务器的证书,而不是你的证书。您应该使用已签名供您使用的证书进行操作。 –
服务器开发人员将其提供给将要呼叫其端点的所有客户端。 –
一般来说,大部分时间'p12'都会发给客户。你有没有试过问他们一个p12?当你双击pem时,系统证书查看器打开。叶证书说什么?查找SubjectDN,IssuerDN,SubjectAltName等属性。这应该给你一个想法,如果你有正确的证书。 –