我正在尝试配置一个在Docker中运行的WildFly服务器以使用SSL:
keytool -genkey -alias axcelpk -keyalg RSA -keystore server.keystore -keysize 2048 -validity 1825
keytool -certreq -alias axcelPK -keystore server.keystore -file axcel.csr
p7b
转换为cer
:openssl pkcs7 -print_certs -inform der -in axcel-B64-chain.p7b -out axcel-B64-chain.cer
keytool -import -alias axcelCert -trustcacerts -file axcel-B64-chain.cer -keystore server.keystore
WildFly在standalone.xml中的配置已经完成,所以我没有碰它(确实检查过了,看起来还不错)。
当从服务器请求页面时,我会得到一个Certificate error
。在检查证书时,我注意到我得到的是私钥的SHA256指纹,而不是实际证书的指纹。此外,发行人是不正确的,认证路径基本上是空的。
有什么想法吗?
发布于 2020-01-10 12:39:44
虽然您没有这样说(或显示),但我想您在您的密钥存储库上做了keytool -list
,并看到了两个条目,一个privateKeyEntry和一个trustedCertEntry,每个条目都带有指纹。privateKeyEntry上的指纹不是私钥的指纹,而是存储在privateKeyEntry中的(第一个)证书的指纹。在您的示例中,这是作为-genkey
操作的一部分生成的虚拟自签名证书,因为您随后没有像您应该的那样替换它。例如,自签名证书始终具有与主题相等的颁发者(而不是像真实CA证书那样设置为真实CA )。
Java /TLS服务器使用privateKeyEntry中的证书(S),接收此证书的/任何客户端都应该(1)不信任它,并显示错误或警告,指示它不受信任;(2)显示它是它自己的证书路径,没有父(S)(即单例,不为空)。SSL/TLS服务器不可能发送私钥;协议不允许它,因为它将是完全不安全和愚蠢的。
在第四步中,在CA提供的证书链上使用keytool -import
与您用于-genkey
操作的别名相同,这里是axcelpk
,而不是不同的别名。注意,实际上不需要第三步;当将CA响应(即您自己的证书链)导入私钥条目时,keytool
(以及更一般的CertificateFactory
)可以直接在PEM或DER中读取p7b。虽然如果您想拥有由OpenSSL支持的PEM序列或不支持的DER序列,但这些序列也可以工作。
https://serverfault.com/questions/998421
复制相似问题