spring boot https with valid cert get ERR_SSL_VERSION_OR_CIP



我正在运行Spring Boot 1.4.0.RELEASE.

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

I生成tomcat密钥库。使用IT_cert.cer

keytool -keystore tomcat-keystore.jks -storepass password -import -alias "tomcat" -file it_issued_cert.cer

配置我的应用。打开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浏览器时,不再有来自浏览器的"不受信任"警告。

但现在有一个ERR_SSL_VERSION_OR_CIPHER_MISMATCH从Chrome和IE11声称我可能使用RC4加密…

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

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

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

我的结论是我配置证书的方式导致这个错误,或者它可以是我的it部门的签名算法?

接近复制的Java SSLHandshakeException: no cipher suites in common

HTTPS服务器需要私钥和匹配的证书,根据证书的颁发方式,服务器可能还需要一个"链"或"中间"证书(有时不止一个)。您只导入了证书,这还不够。

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

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

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

(编辑)Java自8u60(在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,但只有一个证书类型的块,或者如果文件根本不是PEM,则该证书必须是响应某人的CSR(证书签名请求)而颁发的:

如果你给了他们CSR,请详细说明(编辑你的问题)你是如何以及在哪里生成CSR的。这就是私钥所在的位置,您将需要使用该密钥,复制它,或转换(并复制)它,这取决于您所做的操作。

如果你没有给他们CSR,问他们从哪里得到的。如果他们自己生成密钥和CSR,请向他们索要PEM格式的密钥。如果他们从别人那里得到了CSR,就向别人索要PEM格式的密钥。获得它后,将其添加到文件中,然后返回到上面的案例。如果他们坚持要提供PEM格式以外的文件,请详细说明。

如果没有人拥有此证书的私钥,则不能使用该证书。把它扔掉,重新开始。

最新更新