当前位置: 首页 > 知识库问答 >
问题:

spring boot https使用有效的证书get ERR_SSL_VERSION_OR_CIPHER_MISMATCH,自签名工作良好

贝杜吟
2023-03-14

我从IT部门拿到了有效的证书。

我使用it_cert.cer生成了一个tomcat keystore.jks文件

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

配置my 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

当我在HTTPS端口上使用chrome时,浏览器不再发出“不受信任”的警告。

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

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

我的结论是我配置证书的方式导致了这个错误,还是我it部门的签名算法导致了这个错误?

共有1个答案

和丰羽
2023-03-14

几乎被欺骗的Java SSLHandShakeException:没有共同的密码套件

HTTPS服务器需要私钥和匹配的证书,根据证书的颁发方式,服务器可能还需要一个“链”或“中间”证书(偶尔还需要一个以上的证书)。您只导入了一个证书,这是不够的。

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

如果PEM和至少有两个块,其中一个具有类型[RSADSAECENCRYPTED]PRIVATE key,另一个具有类型[X.509Maybesomethingelse]certifice,则可以使用OpenSSL转换为PKCS12,然后使用keytool转换为JKS。首先检查是否需要任何“链”或“中间”证书:如果文件已经包含多个证书,并且不是由一个完全的傻瓜准备的,这些多个证书形成了所需的chai,只需继续。如果文件只包含一个证书,请使用OpenSSL X509-in$file-noout-subject-issuer确保主题是您的服务器并查看颁发者;如果颁发者是在您的环境中受信任的CA(如“我的公司CA”),只需继续。否则,询问它是否需要任何链证书,以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的。这就是privatekey所在的位置,您需要使用该密钥,创建它的副本,或者转换(并复制)它,这取决于您所做的操作。

如果你没有给他们CSR,问他们是从哪里得到的。如果他们自己生成了密钥和CSR,请向他们索取PEM格式的密钥。如果他们从其他人那里得到CSR,请向其他人索取PEM格式的密钥。一旦获得它,将其添加到文件中,然后返回到上面的大小写。如果他们坚持给你PEM格式以外的东西,给出细节。

 类似资料:
  • 我有一个带有这些命令的自签名证书链,并在Apache服务器上配置了它们 但是当我尝试 我从openssl中得到一个错误 用于生成证书的命令或配置文件有问题吗? [req] distinguished_name=req_distinguished_name x509_extensions=v3_ca dirstring_type=nobmp [req_distinguished_name] comm

  • 并检查证书,有效期为5天。 我需要写一个脚本,它将只是检查这个证书的过期日期,但不幸的是,它不能验证它。你能不能换个正确的流量? 我的程序:

  • 我有用于测试的开发人员服务器。它们具有SSL自签名证书,允许我们通过HTTPS测试web应用程序,但带有证书不可验证的显著警告。 这很好,但我有一个服务工作者会用抛出一个错误 SecurityError:无法注册ServiceWorker:获取脚本时发生SSL证书错误。 如何将服务工作者与具有自签名证书的intranet测试服务器一起使用?

  • 问题内容: 我正在尝试使用自签名服务器证书建立TLS连接。 我使用以下示例代码生成了证书:http : //golang.org/src/pkg/crypto/tls/generate_cert.go 我相关的客户端代码如下所示: 以及类似的服务器代码: 因为服务器证书是自签名的,所以对于服务器和客户端CA_Pool使用相同的证书,但这似乎不起作用,因为我总是会收到此错误: 我怎么了 问题答案:

  • 给了我一个错误: javax.net.ssl.sslHandShakeException:Sun.Security.Validator.ValidatorException:PKIX路径构建失败:Sun.Security.Provider.CertPath.SunCertPathBuilderException:找不到请求目标的有效证书路径

  • 问题内容: 我想签署我的应用程序,但是我不希望它的用户在安装我的应用程序之前在他们的手机上安装证书。是否可以使用自签名证书对j2me midlet进行签名? 问题答案: 这是可能的,为此您需要从Verisign购买签名证书。我确实有相同的签名证书,费用为20000卢比(一次)。