第 3 章 配置 HTTPS
摘要
本章论述了如何配置 HTTPS 端点。
3.1. 身份验证替代方案
3.1.1. target-Only Authentication
概述
当为仅目标身份验证配置了应用程序时,目标会向客户端验证其自身,但客户端并不对目标对象进行身份验证,如 图 3.1 “仅限目标身份验证” 所示。
图 3.1. 仅限目标身份验证
Security handshake
在运行应用程序前,客户端和服务器应设置如下:
- 与服务器关联的证书链。证书链以 Java 密钥存储的形式提供(请参阅 第 3.3 节 “指定应用程序自己的证书”)。
- 客户端提供了一个或多个可信证书颁发机构(CA)列表。(请参阅 第 3.2 节 “指定可信 CA 证书”)。
在安全握手过程中,服务器将其证书链发送到客户端(请参阅 图 3.1 “仅限目标身份验证”)。然后,客户端搜索其可信 CA 列表,以查找与服务器证书链中的一个 CA 证书匹配的 CA 证书。
HTTPS 示例
在客户端上,仅目标身份验证不需要策略设置。只需配置您的客户端 而不 将 X.509 证书与 HTTPS 端口关联。但是,您必须为客户端提供可信 CA 证书列表(请参阅 第 3.2 节 “指定可信 CA 证书”)。
在服务器端,在服务器的 XML 配置文件中,确保 sec:clientAuthentication
元素不需要客户端身份验证。可以省略此元素,在这种情况下,默认策略 不需要 客户端身份验证。但是,如果存在 sec:clientAuthentication
元素,它应该配置如下:
<http:destination id="{Namespace}PortName.http-destination"> <http:tlsServerParameters secureSocketProtocol="TLSv1"> ... <sec:clientAuthentication want="false" required="false"/> </http:tlsServerParameters> </http:destination>
您必须在服务器端将 secureSocketProtocol 设置为 TLSv1
,以便防止 Poodle 漏洞(CVE-2014-3566)
其中 want 属性设置为 false (默认值),指定服务器在 TLS 握手期间不从客户端请求 X.509 证书。required 属性也被设置为 false (默认),指定没有客户端证书在 TLS 握手期间不触发异常。
want
属性可以设置为 true
或 false
。如果设置为 true
,则 want
设置会导致服务器在 TLS 握手期间请求客户端证书,但不会给缺少证书的客户端引发异常,因此只要 将所需的
属性设置为 false
。
还需要将 X.509 证书与服务器的 HTTPS 端口关联(请参阅 第 3.3 节 “指定应用程序自己的证书” ),并为服务器提供可信 CA 证书列表(请参阅 第 3.2 节 “指定可信 CA 证书” )。
选择密码套件可能会影响是否只支持目标验证(请参阅 第 4 章 配置 HTTPS 加密套件)。
3.1.2. 双向身份验证
概述
当为 mutual 身份验证配置应用程序时,目标会向客户端验证其自身,客户端向目标验证其自身。这个场景在 图 3.2 “双向身份验证” 中进行了说明。在这种情况下,服务器和客户端都需要一个 X.509 证书进行安全握手。
图 3.2. 双向身份验证
Security handshake
在运行应用程序前,客户端和服务器必须设置如下:
- 客户端和服务器均有一个关联的证书链(请参阅 第 3.3 节 “指定应用程序自己的证书”)。
- 客户端和服务器均配置了可信证书颁发机构(CA)的列表(请参阅 第 3.2 节 “指定可信 CA 证书”)。
在 TLS 握手过程中,服务器将其证书链发送到客户端,客户端将其证书链发送到服务器,请参阅 图 3.1 “仅限目标身份验证”。
HTTPS 示例
在客户端,mutual 身份验证不需要策略设置。只需将 X.509 证书与客户端的 HTTPS 端口关联(请参阅 第 3.3 节 “指定应用程序自己的证书”)。您还需要为客户端提供可信 CA 证书列表(请参阅 第 3.2 节 “指定可信 CA 证书”)。
在服务器端,在服务器的 XML 配置文件中,确保将 sec:clientAuthentication
元素配置为 需要 客户端身份验证。例如:
<http:destination id="{Namespace}PortName.http-destination"> <http:tlsServerParameters secureSocketProtocol="TLSv1"> ... <sec:clientAuthentication want="true" required="true"/> </http:tlsServerParameters> </http:destination>
您必须在服务器端将 secureSocketProtocol 设置为 TLSv1
,以便防止 Poodle 漏洞(CVE-2014-3566)
其中 want
属性设为 true
,指定服务器在 TLS 握手期间从客户端请求 X.509 证书。required
属性设置为 true
,指定没有客户端证书在 TLS 握手期间触发异常。
还需要将 X.509 证书与服务器的 HTTPS 端口关联(请参阅 第 3.3 节 “指定应用程序自己的证书”),并为服务器提供可信 CA 证书列表(请参阅 第 3.2 节 “指定可信 CA 证书”)。
选择密码套件可能会影响是否支持 mutual 身份验证(请参阅 第 4 章 配置 HTTPS 加密套件)。