3.2. 指定受信任的 CA 证书
3.2.1. 部署可信 CA 证书的时间
概述
当应用程序在 SSL/TLS 握手过程中收到 X.509 证书时,应用程序会通过检查签发者 CA 是否是预定义的 CA 证书之一,决定是否信任接收的证书。如果收到的 X.509 证书有效由应用程序信任的 CA 证书有效签名,则证书被视为可信性;否则,它将被拒绝。
哪个应用程序需要指定可信 CA 证书?
作为 HTTPS 握手的一部分,任何可能会接收 X.509 证书的应用程序都必须指定可信 CA 证书列表。例如,这包括以下类型的应用程序:
- 所有 HTTPS 客户端。
- 任何支持 相互身份验证的 HTTPS 服务器。
3.2.2. 为 HTTPS 指定受信任的 CA 证书
CA 证书格式
CA 证书必须采用 Java 密钥存储格式提供。
Apache CXF 配置文件中的 CA 证书部署
要为 HTTPS 传输部署一个或多个可信根 CA,请执行以下步骤:
-
汇编您要部署的可信 CA 证书的集合。可信 CA 证书可从公共 CA 或私有 CA 获取(有关如何生成您自己的 CA 证书的详情,请参考 第 2.5 节 “创建您自己的证书”)。可信 CA 证书可以采用任何与 Java
密钥存储
实用程序兼容的格式;例如 PEM 格式。所有这些都是证书本身--不需要私钥和密码。 给定 CA 证书
cacert.pem
以 PEM 格式,您可以通过输入以下命令将证书添加到 JKS 信任存储(或创建新的信任存储):keytool -import -file cacert.pem -alias CAAlias -keystore truststore.jks -storepass StorePass
其中 CAAlias 是一个方便的标签,可让您使用
keytool
程序访问这个特定 CA 证书。filetruststore.jks
是包含 CA 证书的密钥存储文件,如果此文件尚不存在,则keytool
程序会创建一个。StorePass 密码提供对密钥存储文件truststore.jks
的访问。-
根据需要重复第 2 步,将所有 CA 证书添加到 truststore 文件
truststore.jks
中。 编辑相关的 XML 配置文件以指定信任存储文件的位置。您必须在相关 HTTPS 端口配置中包含
sec:trustManagers
元素。例如,您可以配置客户端端口,如下所示:
<!-- Client port configuration --> <http:conduit id="{Namespace}PortName.http-conduit"> <http:tlsClientParameters> ... <sec:trustManagers> <sec:keyStore type="JKS" password="StorePass" file="certs/truststore.jks"/> </sec:trustManagers> ... </http:tlsClientParameters> </http:conduit>
其中
type
属性指定 truststore 使用 JKS 密钥存储实施,而 StorePass 是访问truststore.jks
密钥存储所需要的密码。配置服务器端口,如下所示:
<!-- Server port configuration --> <http:destination id="{Namespace}PortName.http-destination"> <http:tlsServerParameters secureSocketProtocol="TLSv1"> ... <sec:trustManagers> <sec:keyStore type="JKS" password="StorePass" file="certs/truststore.jks"/> </sec:trustManagers> ... </http:tlsServerParameters> </http:destination>
重要您必须将 secureSocketProtocol 设置为服务器端的
TLSv1
,以便防止 Poodle 漏洞(CVE-2014-3566)警告包含信任存储的目录(例如,X509Deploy
/truststores/
)应是一个安全目录(只能由管理员写入)。