我在配置spring boot tomcat SSL以使用Comodo EV证书时遇到问题。然而,这是我第一次这样做,显然我在某处犯了一些愚蠢的错误。任何帮助都会受到很多赞赏,因为我已经在这几天挣扎了......
所以,我的方案如下: - Spring Boot,Java 8。 - 我创建了KeyStore2.jks,创建了CSR并将其发送给Comodo。我也导出了私钥,以防万一我弄乱了(我希望有可能将私钥导入新的密钥库,以防我弄乱整个密钥库..) - Comodo颁发证书并发送4个文件:
1.Root CA Certificate - AddTrustExternalCARoot.crt
2.Intermediate CA Certificate - COMODORSAAddTrustCA.crt
3.Intermediate CA Certificate - COMODORSAExtendedValidationSecureServerCA.crt
4.POSITIVE EV SSL Certificate - mydomain_com.crt
按照他们的指示,我已将所有4个导入我的密钥库:
keytool -import -trustcacerts -alias root -file AddTrustExternalCARoot.crt -keystore KeyStore2.jks
keytool -import -trustcacerts -alias intermediate -file COMODORSAAddTrustCA.crt -keystore KeyStore2.jks
keytool -import -trustcacerts -alias intermediate2 -file COMODORSAExtendedValidationSecureServerCA.crt -keystore KeyStore2.jks
keytool -import -trustcacerts -alias domain -file mydomain_com.crt -keystore KeyStore2.jks
但是,在导入root后,我收到了警告:
Certificate already exists in system-wide CA keystore under alias <addtrustexternalca>
Do you still want to add it to your own keystore? [no]: yes
我将KeyStore2.jks移动到Spring Boot项目中的/ src / main / resources。
My Spring Boot application.properties config:
server.port=8443
server.ssl.key-store=classpath:KeyStore2.jks
server.ssl.key-store-password=mykeystorepass
server.ssl.keyStoreType=JKS
server.ssl.keyAlias=domain
server.ssl.key-password=mykeypass
然后我们走了:
java.lang.IllegalArgumentException: java.io.IOException: Alias name [domain] does not identify a key entry
我现在正在使用试错法尝试所有方法,但没有。 如果我在.properties中注释掉最后两行:
server.ssl.keyAlias=domain
server.ssl.key-password=mykeypass
tomcat响应:
java.lang.IllegalArgumentException: java.security.KeyStoreException: Cannot store non-PrivateKeys
如果我使用keytool -list列出我的密钥库中的条目,那就是输出(省略指纹):
root, Mar 10, 2018, trustedCertEntry, Certificate fingerprint (SHA1):...
domain, Mar 10, 2018, trustedCertEntry, Certificate fingerprint (SHA1): .....
intermediate, Mar 10, 2018, trustedCertEntry, Certificate fingerprint (SHA1): ....
intermediate2, Mar 10, 2018, trustedCertEntry, Certificate fingerprint (SHA1): ...
证书是否可能与私钥或其他内容不一致?
如何检查?
别名命名是否有任何功能意义?
我是否使用JKS或PKCS12密钥库格式进行Spring Boot?
这是我第一次安装外部证书。我使用自签名证书多次这样做,没有任何问题,但这一个...请帮忙!提前谢谢!
答案 0 :(得分:0)
这里的问题是您的密钥库中没有PrivateKeyEntry。所有证书都添加为trustedCertEntry。这意味着证书在那里,并且如果您将此密钥库用作信任库,则将受到信任,但是您的域证书私钥没有与证书一起正确添加。
据我所知,keytool无法做到这一点,但是您可以使用openssl代替此命令:
openssl pkcs12 -export -in my_domain.crt -inkey my_domain_key.key -out keystore.p12
这将创建一个PKCS12密钥库,并将您的域证书作为PrivateKeyEntry。
此后,您可以照常使用keytool来添加其他证书,尽管我认为您不需要根证书。
出于好奇,您是如何针对自签名证书执行此操作的?对于那些人来说,这也是一个问题。
我不时遇到的另一个问题是应用程序无法读取私钥。这总是由密钥库和密钥本身具有不同的密码引起的。我看到您已经专门配置了密钥密码,因此这对您来说可能不是一个问题(我不知道您可以这样做)。
别名的别名并不重要,只要别名在密钥库中是唯一的即可。
建议使用PKCS12(甚至通过keytool本身)。 PKCS12是开放标准,而JKS是Java标准。
要验证密钥库是否正确设置,请像以前一样列出内容。它应该像这样(手动复制和修改):
root, Mar 10, 2018, trustedCertEntry, Certificate fingerprint (SHA1):...
domain, Mar 10, 2018, PrivateKeyEntry, Certificate fingerprint (SHA1): .....
intermediate, Mar 10, 2018, trustedCertEntry, Certificate fingerprint (SHA1): ....
intermediate2, Mar 10, 2018, trustedCertEntry, Certificate fingerprint (SHA1): ..
免责声明:我也是这个学科的自学者,所以我不是专家。