带有效证书的spring boot https获取ERR_SSL_VERSION_OR_CIPHER_MISMATCH,自签名工作正常

时间:2016-10-02 08:43:12

标签: java tomcat ssl https spring-boot

我正在运行Spring Boot 1.4.0.RELEASE。

我从我的IT部门获得了有效的证书。

我使用IT_cert.cer

生成了一个tomcat keystore.jks文件
keytool -keystore tomcat-keystore.jks -storepass password -import -alias "tomcat" -file it_issued_cert.cer

配置我的application.yml以启用SSL

server:
  context-path: /uaa
  port: 9999
  ssl:
      enabled: true
      key-store: classpath:tomcat-keystore.jks
      key-store-password: password
      key-password: password
      enabled-protocols: TLSv1.2 # make sure only to use the latest TLS version

用于签署证书的算法是

Signature algorithm name: SHA256withRSA

当我运行spring-boot应用程序时,它会启动并找到我的证书。

当我在我的HTTPS端口上使用chrome时,不再是"不受信任的"来自浏览器的警告。

但现在Chrome和IE11的ERR_SSL_VERSION_OR_CIPHER_MISMATCH声称我可能正在使用RC4加密......

我尝试过指定低于TLSv1.2且采用默认值的非安全协议..但它们都会导致相同的错误。

我确定最新的Chrome / IE11有TLSv1.2 所以我对浏览器的错误感到困惑。

此外,如果我使用自签名,一切正常,但我收到关于信任自签名的安全警告。

我的结论是我配置我的证书导致此错误的方式,还是来自我的IT部门的签名算法?

1 个答案:

答案 0 :(得分:1)

近欺骗Java SSLHandshakeException: no cipher suites in common

HTTPS服务器需要私钥和匹配证书,并且根据证书的颁发方式,服务器可能还需要一个'链?或者'中间'证书(偶尔不止一个)。您仅导入 证书,但这还不够。

首先查看您的文件it_issued_cert.cer以查看它是否为PEM格式:它是否包含分组为行的所有可读字符,至少一个块以行开头
-----BEGIN sometype_in_caps-----
然后一些线条完全由字母,数字,plussign +和斜线/组成,最后可能等于=,最后是一条线 -----END same_type----

如果PEM并且至少有两个块,其中一个具有类型[RSA|DSA|EC|ENCRYPTED] PRIVATE KEY而其他块具有(有)类型[X.509|maybesomethingelse] CERTIFICATE,则可以使用OpenSSL转换为PKCS12,然后将keytool转换为转换为JKS。首先检查是否有任何链条'或者'中间'证书是必需的:如果文件已经包含多个证书并且没有通过完整的doofus准备那些多个证书形成所需的chai,那么继续。如果文件只包含一个证书,请使用openssl x509 -in $file -noout -subject -issuer确保主题是您的服务器并查看颁发者;如果发行人是您所在环境中信任的CA(例如,我的公司CA'),请继续。否则,询问IT是否需要任何链证书,以PEM格式获取它们,并将它们添加到文件中。然后做:

openssl pkcs12 -export -in $file -out new.p12 -friendlyname alias_you_want

(编辑)自8u60以来的Java(在2015年 - 甚至在我编写原始答案之前)默认接受PKCS12密钥库,如果已配置,早期版本可以这样做。对于想要JKS的早期版本,请执行(拼写更正,如aszahran所评论):

keytool -importkeystore -srckeystore new.p12 -srcstoretype pkcs12 -destkeystore new.jks 
# on Java versions that need JKS, it is the default type
# but can specify -deststoretype jks if you want

如果文件是PEM但是只有一个类型为CERTIFICATE的块,或者该文件根本不是PEM,则必须发出此证书以响应某人的CSR(证书签名请求):

如果您向他们提供了CSR,请提供详细信息(编辑您的问题)生成CSR的方式和位置。这就是私钥的位置,你需要使用该密钥,复制它,或转换(并复制)它,具体取决于你所做的。

如果你没有给他们CSR,请问他们在哪里得到它。如果他们自己生成密钥和CSR,请向他们索取PEM格式的密钥。如果他们从其他人那里获得CSR,请向其他人询问PEM格式的密钥。获得后,将其添加到文件中,然后返回上面的案例。如果他们坚持给你一些PEM格式以外的东西,请提供详细信息。

如果没有人拥有此证书的私钥,则无法使用证书。丢弃并重新开始。