1.4.2.2. 使用 Elytron 子系统为应用启用双向 SSL/TLS
获取或生成您的客户端密钥存储:
keytool -genkeypair -alias client -keyalg RSA -keysize 1024 -validity 365 -keystore client.keystore.jks -dname "CN=client" -keypass secret -storepass secret
$ keytool -genkeypair -alias client -keyalg RSA -keysize 1024 -validity 365 -keystore client.keystore.jks -dname "CN=client" -keypass secret -storepass secret
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导出客户端证书:
keytool -exportcert -keystore client.keystore.jks -alias client -keypass secret -storepass secret -file /path/to/client.cer
keytool -exportcert -keystore client.keystore.jks -alias client -keypass secret -storepass secret -file /path/to/client.cer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为部署的应用程序启用双向 SSL/TLS。
在 JBoss EAP 中,可以通过使用安全命令或使用
elytron
子系统命令,为已部署的应用启用双向 SSL/TLS。使用安全命令.
security enable-ssl-http-server
命令可用于为部署的应用启用双向 SSL/TLS。注意以下示例不会验证证书,因为不存在信任链。如果您使用可信证书,则可以无任何问题地验证客户端证书。
示例:向导使用
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意执行命令后,管理 CLI 将重新加载服务器。
要完成双向 SSL/TLS 身份验证,您需要将服务器证书导入到客户端信任存储中,并将客户端配置为显示客户端证书。
使用 elytron 子系统命令.
在 JBoss EAP 中,您还可以使用
elytron
子系统和undertow
子系统,为已部署的应用启用双向 SSL/TLS。获取或生成密钥存储。
在 JBoss EAP 中启用双向 SSL/TLS 之前,您必须获取或生成密钥存储、信任存储和您计划使用的证书。
创建服务器密钥存储:
/subsystem=elytron/key-store=twoWayKS:add(path=/PATH/TO/server.keystore.jks,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-store=twoWayKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=1024,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost") /subsystem=elytron/key-store=twoWayKS:store()
/subsystem=elytron/key-store=twoWayKS:add(path=/PATH/TO/server.keystore.jks,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-store=twoWayKS:generate-key-pair(alias=localhost,algorithm=RSA,key-size=1024,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost") /subsystem=elytron/key-store=twoWayKS:store()
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意以上命令使用密钥存储的绝对路径。或者,您可以使用
relative-to
属性指定基础目录变量,而path
则指定相对路径。/subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS)
/subsystem=elytron/key-store=twoWayKS:add(path=server.keystore.jks,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=JKS)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导出服务器证书:
/subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
/subsystem=elytron/key-store=twoWayKS:export-certificate(alias=localhost,path=/path/to/server.cer,pem=true)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
为服务器信任存储创建密钥存储,并将客户端证书导入到服务器信任存储中。
注意以下示例不会验证证书,因为不存在信任链。如果您使用可信证书,则可以无任何问题地验证客户端证书。
/subsystem=elytron/key-store=twoWayTS:add(path=/path/to/server.truststore.jks,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-store=twoWayTS:import-certificate(alias=client,path=/path/to/client.cer,credential-reference={clear-text=secret},trust-cacerts=true,validate=false) /subsystem=elytron/key-store=twoWayTS:store()
/subsystem=elytron/key-store=twoWayTS:add(path=/path/to/server.truststore.jks,credential-reference={clear-text=secret},type=JKS) /subsystem=elytron/key-store=twoWayTS:import-certificate(alias=client,path=/path/to/client.cer,credential-reference={clear-text=secret},trust-cacerts=true,validate=false) /subsystem=elytron/key-store=twoWayTS:store()
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置一个
key-manager
,以引用您的密钥存储密钥存储
。/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS, algorithm="SunX509", credential-reference={clear-text=secret})
/subsystem=elytron/key-manager=twoWayKM:add(key-store=twoWayKS, algorithm="SunX509", credential-reference={clear-text=secret})
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您需要了解您使用的 JDK 提供了哪些关键管理器算法。例如,使用 SunJSSE 的 JDK 提供
PKIX
和SunX509
算法。以下示例命令将
SunX509
用于密钥管理器算法。配置
trust-manager
,以引用您的 truststore密钥存储
。/subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS, algorithm="SunX509")
/subsystem=elytron/trust-manager=twoWayTM:add(key-store=twoWayTS, algorithm="SunX509")
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您需要了解您使用的 JDK 提供了哪些关键管理器算法。例如,使用 SunJSSE 的 JDK 提供
PKIX
和SunX509
算法。上面的示例命令将
SunX509
用于密钥管理器算法。配置一个
server-ssl-context
,以引用您的key-manager
、trusted-manager
并启用客户端身份验证:/subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM, protocols=["TLSv1.2"], trust-manager=twoWayTM, need-client-auth=true)
/subsystem=elytron/server-ssl-context=twoWaySSC:add(key-manager=twoWayKM, protocols=["TLSv1.2"], trust-manager=twoWayTM, need-client-auth=true)
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您需要确定您要支持的 SSL/TLS 协议。上面的示例命令使用
TLSv1.2
。您可以使用cipher-suite-filter
参数指定允许哪些密码套件,以及使用-cipher-suites-order
参数来执行服务器密码套件顺序。使用-cipher-suites-order
属性默认设置为true
。这与旧的安全
子系统行为不同,后者默认为遵从客户端密码套件顺序。警告红帽建议显式禁用 SSLv2、SSLv3 和 TLSv1.0,以便在所有受影响的软件包中明确禁用 TLSv1.1 或 TLSv1.2。
检查并查看
https-listener
是否配置为使用传统安全域进行其 SSL 配置。/subsystem=undertow/server=default-server/https-listener=https:read-attribute(name=security-realm) { "outcome" => "success", "result" => "ApplicationRealm" }
/subsystem=undertow/server=default-server/https-listener=https:read-attribute(name=security-realm) { "outcome" => "success", "result" => "ApplicationRealm" }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以上命令显示
https-listener
已配置为使用ApplicationRealm
传统安全域进行 SSL 配置。Undertow 无法同时引用elytron
子系统中的传统安全域和ssl-context
。因此,您必须删除对旧安全域的引用。注意如果未定义
结果,则无需在下一步中移除对安全域的引用。移除对传统安全域的引用,并将
https-listener
更新为从 Elytron 使用ssl-context
。注意HTTPS-listener
必须始终配置security-realm
orssl-context
。在两种配置之间更改时,命令必须以单批形式执行,如下所示:batch /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=twoWaySSC) run-batch
batch /subsystem=undertow/server=default-server/https-listener=https:undefine-attribute(name=security-realm) /subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=twoWaySSC) run-batch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新加载服务器:
reload
reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意要完成双向 SSL/TLS 身份验证,您需要将服务器证书导入到客户端信任存储中,并将客户端配置为显示客户端证书。
keytool -importcert -keystore client.truststore.jks -storepass secret -alias localhost -trustcacerts -file /path/to/server.cer
$ keytool -importcert -keystore client.truststore.jks -storepass secret -alias localhost -trustcacerts -file /path/to/server.cer
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将您的客户端配置为使用客户端证书。
您需要将客户端配置为向服务器提供可信客户端证书,以完成双向 SSL/TLS 身份验证。例如,如果使用浏览器,您需要将可信证书导入到浏览器的信任存储中。
此流程强制采用双向 SSL/TLS,但不更改应用的原始身份验证方法。
如果要更改原始身份验证方法,请参阅如何为 JBoss EAP 配置身份管理中的通过证书配置身份验证 。
现在应用程序启用了双向 SSL/TLS。
您可以使用 disable- ssl-http-server 命令为已部署的应用程序禁用
双向 SSL/TLS。
security disable-ssl-http-server
security disable-ssl-http-server
此命令不会删除 Elytron 资源。它将系统配置为使用 ApplicationRealm
传统安全域进行 SSL 配置。