【发布时间】:2016-11-24 17:47:55
【问题描述】:
我们希望一个新的 WebService 通过 HTTPS 连接,并且我们希望为此设置服务器证书。我正在尝试详细解释我到目前为止一直在执行的步骤:
-
我们使用以下命令创建了服务器证书:
keytool -storepass * -keystore .my_keystore -keypass * -genkey -alias ALIAS -dname "CN=[FQDN here], OU=ID, O=*, L=*, ST=*, C=*" -keyalg RSA -keysize 2048 -validity 3000 -
我们为证书生成了一个签名请求
keytool -storepass * -keystore .my_keystore -certreq -alias ALIAS -file ALIAS.csr 我们将 CSR 发送到我们公司(有自己的 CA),并获得了签名证书。
-
我们验证了证书:
openssl verify -CAfile CA_certificate.pem ALIAS_SIGNED.pemALIAS_SIGNED.pem:好的
-
我们已在我们的密钥库中导入此签名证书。
keytool -importcert -keystore .my_keystore -alias ALIAS_SIGNED -file ALIAS_SIGNED.pem -storepass * -
我们正在尝试从另一台机器上连接,该机器的 CA 证书安装在 Java 的 cacerts 文件中:
$ openssl s_client -connect [IP]:[port] CONNECTED(00000003) depth=0 /C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here] verify error:num=18:self signed certificate verify return:1 depth=0 /C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here] verify return:1 Certificate chain 0 s:/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here] i:/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here] Server certificate -----BEGIN CERTIFICATE----- ABcDefGHI...z -----END CERTIFICATE----- subject=/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here] issuer=/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here] No client certificate CA names sent SSL handshake has read 1610 bytes and written 279 bytes New, TLSv1/SSLv3, Cipher is EDH-RSA-DES-CBC3-SHA Server public key is 2048 bit Secure Renegotiation IS supported Compression: NONE Expansion: NONE SSL-Session: Protocol : TLSv1 Cipher : EDH-RSA-DES-CBC3-SHA Session-ID: 5790...EAB54 Session-ID-ctx: Master-Key: D07...3E13 Key-Arg : None Start Time: 1369086263 Timeout : 300 (sec) Verify return code: 18 (self signed certificate) closed
但我得到的只是这个错误。我已尝试在任何可能的密钥库中安装所有可能的证书(CA、已签名和未签名),但 openssl 客户端并未对其进行验证。
请给点提示好吗?
对不起,如果这里有任何不一致(例如混合keytool和openssl):我们是这方面的新手,经过多天的努力,还没有找到任何可行的解决方案。
【问题讨论】:
-
“我们将 CSR 发送给我们的公司(拥有自己的 CA),并获得了签名证书....” - 您的公司应该拒绝 CSR 或修复了生成的证书。 不要将主机名放在Common Name (CN)中;将它们放在 Subject Alternate Name (SAN) 中。另请参阅How do you sign Certificate Signing Request with your Certification Authority? 和How to create a self-signed certificate with openssl? 您的
s_client问题是另一个问题;使用-CAfile修复它。 -
首先,谢谢。关于这一点,在返回的签名证书中,关于颁发者和主题的信息是 OK:
Owner: CN=[FQDN here], O=[CA ROOT HERE] Issuer: O=[CA ROOT HERE]并且 CAfile 正在要求一个私钥,我看不到我在哪里生成它。 -
这是使用 CA 信息更新 s_client 指令的结果:同样的错误:
$ openssl s_client -connect [HOST]:[PORT] -CAfile ca_exported.pem...depth=0 C = *, ST = *, L = *, O = *, OU = ID, CN = [FQDN here] verify error:num=18:self signed certificate verify return:1 Certificate chain 0 s:/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here] i:/C=*/ST=*/L=*/O=*/OU=ID/CN=[FQDN here]...Verify return code: 18 (self signed certificate) -
问题可能出在服务器证书的创建方式上吗?
-
我们无法判断问题出在哪里。没有足够的信息,因为主机名、主题和发行者等信息已被删除。而且您还没有提供任何代码。我们能为你做的不多。我们能做的就是关闭问题。