将 CA 签名证书导入 JKS

Import CA signed certificates to JKS

我从 CA 获得了 4 个 .crt 文件,如下所示,

AddTrustExternalCARoot.crt
COMODORSADomainValidationSecureServerCA.crt
COMODORSAAddTrustCA.crt
demo_site_domain.crt

第二个和第三个是中级证书。我想将 .crt 文件导入 wso2carbon.jks 存储并将其替换为记录在案的 wso2 服务器的现有 jks here。 我的问题是,文档需要 wso2carbon 作为别名,但我只能使用该别名导入一个证书,因此我应该导入哪个 .crt 文件?或者我应该导入一个由以上四个 crt 文件创建的复合 .crt 文件(这可能吗?) 我尝试使用 AddTrustExternalCARoot.crtdemo_site_domain.crt,但在 wso2 服务器中设置 .jks 文件后,服​​务器 url 出现以下错误,

Secure Connection Failed

The connection to ip:port was interrupted while the page was loading.

The page you are trying to view cannot be shown because the authenticity of the received data could not be verified.
Please contact the website owners to inform them of this problem.

我做错了什么?

我使用的 wso2 服务器是 WSO2 UES,我必须将密码放在以下四个文件中以克服 Caused by: java.io.IOException: Keystore was tampered with, or password was incorrect 错误。

repository/conf/security/cipher-text.properties
repository/conf/identity.xml
repository/conf/carbon.xml
repository/conf/tomcat/catalina-server.xml

更新:

我按照给出的答案进行操作,但最后一条命令没有给出 installed in keystore 而是 Certificate was added to keystore 以下是我的命令和回复,

keytool -importcert -keystore wso2carbon.jks -file AddTrustExternalCARoot.crt -alias commoroot -trustcacerts

输入密钥库密码:
重新输入新的密码: 别名下的证书已存在于系统范围的 CA 密钥库中 你还想把它添加到你自己的密钥库吗? [否]:是 证书已添加到密钥库

keytool -importcert -keystore wso2carbon.jks -file COMODORSAAddTrustCA.crt -alias commointermediate1

输入密钥库密码:
证书已添加到密钥库

keytool -importcert -keystore wso2carbon.jks -file COMODORSADomainValidationSecureServerCA.crt -alias commointermediate2

输入密钥库密码:
证书已添加到密钥库

keytool -importcert -keystore wso2carbon.jks -file demo_site_domain.crt -alias wso2carbon

输入密钥库密码:
证书已添加到密钥库

(元:我很确定这是重复的,但我找不到合适的。无论如何回答。)

That page 似乎缺少 keytool 命令行选项和 PEM 文件格式所需的所有破折号;假设你已经纠正了这一点:

在第 3 项中显示 "you might have to import any intermediate certificates ... before you can import your [CA-]signed certificate"。事实上,你知道。有两种方法可以做到这一点:

1:将每个证书 除了 您的服务器(或其他最终实体)证书,从上到下导入到 单独的 条目在密钥库中;对于你的情况: keytool -importcert -keystore wso2carbon.jks -file AddTrustExternalCARoot -alias somealias1 -trustcacerts keytool -importcert -keystore wso2carbon.jks -file COMODORSAAddTrustCA.crt -alias somealias2 keytool -importcert -keystore wso2carbon.jks -file COMODORSADomainValidationSecureServerCA.crt -alias somealias3 其中 somealias{1,2,3} 是彼此不同的别名,并且不同于密钥库中已有的任何别名,尤其是 wso2carbon。 Meta:那些 code 行不应该像那样换行,但我无法让它们停止。

然后 将您的服务器证书导入同一密钥库文件 中的(编辑)相同别名,其中 -genkeypair-certreq 以前完成的 (或者替代地别名是 copy 在这个密钥库中的 PrivateKey 条目是 早期由 -genkeypair-certreq 创建): keytool -importcert -keystore wso2carbon.jks -file demo_site_domain.crt -alias wso2carbon 这个(最后)步骤应该说 Certificate reply was installed in keystore 而不是 Certificate was added to keystore。否则它实际上失败了,即使它没有给出错误信息。

2:将所有证书连接到一个文件中,首先使用服务器 (EE) 证书,然后将 combined 文件导入到 (edit) 相同先前使用的同一密钥库文件中的别名(或该 privateKey 条目的副本):

# assuming any kind of Unix
cat demo_site_domain.crt COMODORSADomainValidationSecureServerCA.crt \
  COMODORSAAddTrustCA.crt AddTrustExternalCARoot.crt >combinedfile
# if Windows use copy a+b+etc or (for PEM) cut&paste in a plaintext editor like Notepad 
keytool -importcert -keystore wso2carbon.jks -file combinedfile -alias wso2carbon -trustcacerts

除第一个以外的证书的顺序实际上并不重要此处,但它们将存储在密钥库中并在 SSL/TLS 协议中使用 "upward" 顺序,所以我在 cat 中使用该顺序以保持一致性和清晰度。

(edit) 如果在任何时候对给定密钥库文件中有或没有的条目有任何疑问,您可以使用 [=24= 列出它们].您使用 -genkeypair 生成的任何条目都是 PrivateKey 条目,并且将包含 或者 keytool [=53= 自动生成的自签名证书]或您从CA获得的带有链的证书。显示格式相当混乱,可能会造成混淆,但请查找 Certificate[1]: Certificate[2]: 等行,紧接着是 Owner:(在标准术语中表示主题)和 Issuer:。 另一方面,您单独导入的每个 CA 根证书或中间证书将是一个仅包含该证书的 trustedCert 条目。

该页面还说您需要将 "signed certificate" 导入 client-truststore.jks。我相信那是错误的。您通常需要在任何客户端信任库中放置一个 自签名 证书,但是对于由知名 CA 签名的证书,您不需要这样做 Comodo/Addtrust是。但是,向信任库添加一个不必要但有效的证书没有什么坏处