我有一个证书,在go daddy中生成了一个CSR。
我尝试生成我自己的CSR以获得我的域的证书。我已经按照他们的教程生成了一个带有CSR的商店:
keytool -genkey -alias codesigncert -keypass -keyalg RSA -keysize 2048 -dname "CN=displayname,O=companyname,C=US,ST=state,L=city" -keystore codesignstore -storepass
但是godaddy拒绝了生成的CSR,所以我使用了他们生成的CSR。
在那之后,我使用了来自thomasvitale.com的教程中的命令
keytool -import -alias <my alias> -file <downloadedcertificate file>.crt -keystore keystore.p12 -storepass password
生成的.p12密钥库不会启动,因为spring说:
DerInputStream.getLength(): lengthTag=109, too big.
读了很多关于它的文章,我发现这就是密钥库的生成方式和某个东西的版本。因此,我不得不生成另一个密钥库。
为了生成当前有问题的密钥库,我尝试了以下mediam.com指令:
用于生成密钥库:
keytool -genkey -alias <alias> -keyalg RSA -keystore <keystore.jks> -keysize 2048
用于生成CSR:
keytool -certreq -alias <alias> -keystore <keystore.jks> -file <domain>.csr
发送CSR以生成ssl证书,并使用tomcat选项下载这些证书。然后导入证书:
中间证书:keytool -import -trustcacerts -alias <alias> -file gd_bundle-g2-g1.crt -keystore <keystore.jks>
根证书:keytool -import -trustcacerts -alias <alias> -file e2e56xxxxf40c7.crt -keystore <keystore.jks>
然后我以这种方式创建了pcks密钥库:
keytool -importkeystore -srckeystore <keystore.jks> -destkeystore <keystore.p12> -srcstoretype JKS -deststoretype PKCS12 -deststorepass <password> -srcalias <src alias> -destalias <dest alias>
之后,我安装证书的spring-boot-config是:在对这个问题发表评论后,我改为使用JKS并删除了密码。
server:
port: 8443
ssl:
enabled: true
key-store-type: JKS
key-store: classpath:asgard_keystore.jks
key-store-password: generated
key-alias: asgard
在将所有这些安装到p12之后,服务器启动正常,但对服务器的任何请求都会产生:err_ssl_version_or_cipher_mismatch
或SSL_ERROR_NO_CYPHER_OVERLAP
在wireshark中捕捉到了这一点,刚刚说Alert 21使用TLS 1.2握手失败(40(。
我正在使用underflow作为服务器。我不记得我是否在CSR的名称和姓氏字段中使用了域。
使用我得到的挖掘工具解码我的CSR:
Common name
<my domain>
Organization
<my org>
Organizational unit
<my city>
City/locality
<my city>
State/province
<my estate>
Country
<my country>
Signature algorithm
SHA256
Key algorithm
RSA
Key size
2048
似乎我做的每件事都和每一个教程完全一样,每次都失败:(
根据对这个问题的评论,关键工具列表调用:
keytool-jks:的列表
Keystore type: jks
Keystore provider: SUN
Your keystore contains 3 entries
Alias name: asgard
Creation date: Dec 7, 2018
Entry type: trustedCertEntry
Owner: CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
Issuer: CN=Go Daddy Root Certificate Authority - G2, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
Serial number: 7
Valid from: Tue May 03 07:00:00 UTC 2011 until: Sat May 03 07:00:00 UTC 2031
Certificate fingerprints:
MD5: 96<removed>:40
SHA1: 2<removed>B8
SHA256: 97:3A<removed>E9:76:FF:6A:62:0B:67:12:E3:38:32:04:1A:A6
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
< not relevant >
]
*******************************************
*******************************************
Alias name: intermediate
Creation date: Dec 14, 2018
Entry type: trustedCertEntry
Owner: CN=<removed>, OU=Domain Control Validated
Issuer: CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
Serial number: 5c<removed>
Valid from: Fri Dec 07 20:25:19 UTC 2018 until: Mon Dec 07 18:10:35 UTC 2020
Certificate fingerprints:
MD5: 31<removed>74:77
SHA1: 8D:<removed>:C0:F5:AE:0B
SHA256: 77:14:9<removed>8B:1D:67:46:1A:67:A2:72:2F:2F:9E:F2:16
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
< not relevant >
]
*******************************************
*******************************************
Alias name: server
Creation date: Dec 7, 2018
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=<removed>, OU=São Paulo, O=Ideas Farm, L=São Paulo, ST=SP, C=BR
Issuer: CN=a<removed>, OU=São Paulo, O=Ideas Farm, L=São Paulo, ST=SP, C=BR
< not relevant >
]
]
*******************************************
*******************************************
完整报告:粘贴报告
我已经删除了我认为不相关的部分回复。我发现pkcs(.p12(文件报告为jks类型很奇怪。
此外,我从证书颁发机构收到的文件是:
5<removedhex>6b1b.crt
gd_bundle-g2-g1.crt
gdig2.crt.pem
gd_bundle包含三个证书-----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----
。另外两个只是一个。
您已经告诉java使用别名为asgard
的证书。我可以在你的.p12转储中看到"asgard"实际上是一个CA。看看所有者:
Alias name: asgard
Creation date: Dec 14, 2018
Entry type: trustedCertEntry
Owner: CN=Go Daddy Secure Certificate Authority - G2, OU=http://certs.godaddy.com/repository/, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
Issuer: CN=Go Daddy Root Certificate Authority - G2, O="GoDaddy.com, Inc.", L=Scottsdale, ST=Arizona, C=US
我猜您实际上是想告诉spring加载您的.jks文件并指定一个别名codesigncert
。
此外,删除您的ciphers
和enabled-protocols
属性,除非您有充分的理由覆盖弹簧设置为默认值。Spring通过最新的安全公告来更新它们的默认值。
最后,更改您的密钥库密码,因为现在整个互联网都知道它是什么:(
我已经解决了这个问题。
在对每个证书进行了大量篡改之后,我发现GoDaddy发布了证书响应和两个相等的中间证书。两者都在下载包中,并且没有根证书。
正如评论中所述,我有一个自签名的伪密钥,我不知道我必须导入与私钥别名相同的服务器证书(证书响应(。我用另一个别名导入,以为是别的东西。我的私钥将保持自签名状态,不会经过验证。
我在密码方面遇到的错误是因为我告诉spring使用一个不是私钥的证书。这些不支持解码握手。
我面临的另一个问题是,godaddy没有在您下载的捆绑包中提供根证书。我试图添加两个中间体,而根在他们拥有的存储库中是可用的。下载并导入正确的根证书后,我就可以将私钥验证证书导入到与伪密钥相同的别名中。
因此,解决方案只是从用于创建CSR的JKS密钥库(其中只包含我生成的私钥(开始。然后添加根证书和中间证书,最后添加服务器证书(具有十六进制名称的证书(,其别名与私钥相同。