(SSL)同一台计算机上的根CA和客户端证书?

时间:2017-04-12 21:29:20

标签: java python ssl https openssl

我正在尝试与我公司的某些软件进行通信(我没有写过)。我们可以通过配置设置服务器证书,服务器密钥和服务器CA证书。

我在主机上生成根证书:

openssl genrsa -out rootCA.key 2048

我使用以下方式对根证书进行自签名:

openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

我生成客户端密钥与使用根密钥相同,生成CSR:

openssl req -new -key device.key -out device.csr

然后我使用根证书签署客户端密钥:

openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 500 -sha256

我正在从Python OpenSSL到这个应用程序(用Java运行)进行通信。我将OpenSSL中的密钥和证书文件设置为设备密钥,然后将server-ca-cert和server-cert设置为根证书,将server-key设置为根密钥。无论如何,我总是在Python中得到这个错误:

OpenSSL.SSL.Error: [('SSL routines', 'SSL3_GET_SERVER_CERTIFICATE', 'certificate verify failed')]

Java中的这个错误:

On handshake complete OpenSSL error: error:14094418:SSL routines:SSL3_READ_BYTES:tlsv1 alert unknown ca

我不知道我做错了什么,或者是否是我没有得到的软件 - 在我去讨论CTO之前,我想知道我是否理解SSL / TLS。我错过了一步吗?服务器是否应该使用根证书作为自己的证书?

修改

更多地解释设置:

我们通常在群集环境中部署。

客户端应用程序在主/备用配置中的两台计算机上运行,​​服务器是群集中的所有计算机(包括两个主/备用网络集成单元)。作为我们安装过程的一部分,主机将根SSH密钥分发给集群中的所有计算机 - 因此,通过Ansible,我可以完全控制所有计算机。这两个NIU有一个应用程序,它使用SOAP over TLS来控制集群中所有机器上的软件。我们历来使用UDP,但我们正在努力提高安全性。

0 个答案:

没有答案