在 JBoss EAP 中配置 SSL/TLS
在 JBoss EAP 中启用 SSL/TLS 的指南来保护 JBoss EAP 管理界面和部署的应用程序
摘要
提供有关 JBoss EAP 文档的反馈 复制链接链接已复制到粘贴板!
要报告错误或改进文档,请登录到 Red Hat JIRA 帐户并提交问题。如果您没有 Red Hat Jira 帐户,则会提示您创建一个帐户。
流程
- 单击以下链接 以创建 ticket。
- 在 Summary 中输入问题的简短描述。
- 在 Description 中提供问题或功能增强的详细描述。包括一个指向文档中问题的 URL。
- 点 Submit 创建问题,并将问题路由到适当的文档团队。
使开源包含更多 复制链接链接已复制到粘贴板!
红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。我们从这四个术语开始:master、slave、黑名单和白名单。由于此项工作十分艰巨,这些更改将在即将推出的几个发行版本中逐步实施。有关更多详情,请参阅我们的首席技术官 Chris Wright 提供的消息。
第 1 章 为管理界面和应用程序启用单向 SSL/TLS 复制链接链接已复制到粘贴板!
SSL/TLS 或传输层安全(TLS)是基于证书的安全协议,用于保护通过网络通信的两个实体之间的数据传输。
您可以为 JBoss EAP 管理界面和 JBoss EAP 上部署的应用程序启用单向 SSL/TLS。如需更多信息,请参阅以下步骤:
1.1. 为管理界面启用单向 SSL/TLS 复制链接链接已复制到粘贴板!
为管理界面启用单向 SSL/TLS,以便 JBoss EAP 管理接口和连接接口的客户端之间的通信是安全的。
要为管理界面启用单向 SSL/TLS,您可以使用以下步骤:
- 使用向导为管理接口启用单向 SSL/TLS :使用此流程使用基于 CLI 的向导快速设置 SSL/TLS。Elytron 根据您的向导的输入创建所需资源。
- 使用子系统命令为管理接口启用单向 SSL/TLS :使用此流程配置必要的资源,以手动启用 SSL/TLS。手动配置资源可让您更好地控制服务器配置。
另外,您可以使用 安全命令禁用 SSL/TLS 管理接口的步骤,为管理接口禁用 SSL/TLS。
1.1.1. 使用向导为管理接口启用单向 SSL/TLS 复制链接链接已复制到粘贴板!
Elytron 提供了一个向导来快速设置 SSL/TLS。您可以使用包含证书的现有密钥存储,或者使用向导生成的密钥存储和自签名证书来启用 SSL/TLS。您还可以使用 --lets-encrypt 选项从 Let 的 Encrypt 证书颁发机构获取和使用证书。有关 Let's Encrypt 的详情,请查看 Let 的加密文档。
使用向导生成的自签名证书来启用 SSL/TLS,仅用于测试和开发目的。对于生产环境,始终使用证书颁发机构(CA)签名证书。
不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。
向导配置为管理接口启用 SSL/TLS 所需的以下资源:
-
key-store -
key-manager -
server-ssl-context -
然后,
server-ssl-context应用到http-interface。
Elytron 将每个资源命名为 resource-type-UUID。例如,key-store-9e35a3be-62bb-4fff-afc2-2d8d141b82bc。通用唯一标识符(UUID)有助于避免资源的名称冲突。
先决条件
- JBoss EAP 正在运行。
流程
在管理 CLI 中输入以下命令来启动向导,为管理接口配置单向 SSL/TLS。
语法
security enable-ssl-management --interactive
security enable-ssl-management --interactiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示时输入所需信息。
使用
--lets-encrypt选项从 Let 的 Encrypt 证书颁发机构获取和使用证书。如果已经为管理界面启用了 SSL/TLS,向导会退出,并显示以下信息:
SSL is already enabled for http-interface
SSL is already enabled for http-interfaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 要更改现有配置,首先禁用对管理接口的 SSL/TLS,然后创建新配置。有关为管理接口禁用 SSL/TLS 的详情,请参考使用 向导为管理接口禁用 SSL/TLS。
注意要启用单向 SSL/TLS,请在提示启用 SSL 相互身份验证时输入
n或 blank。设置 mutual 身份验证可启用双向 SSL/TLS。以互动方式使用向导的示例
security enable-ssl-management --interactive
security enable-ssl-management --interactiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向导提示输入示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
y后,服务器将重新加载。如果您配置了自签名证书,请使用向导来生成自签名证书或配置了 Java 虚拟机(JVM)信任的证书,管理 CLI 会提示您接受服务器提供的证书。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
T或P以继续连接。您将获得以下输出:
Server reloaded. SSL enabled for http-interface ssl-context is ssl-context-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1 key-manager is key-manager-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1 key-store is key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1
Server reloaded. SSL enabled for http-interface ssl-context is ssl-context-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1 key-manager is key-manager-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1 key-store is key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
使用管理 CLI 客户端连接来验证 SSL/TLS。
您可以通过将 Elytron 客户端 SSL 上下文放在配置文件中,然后使用管理 CLI 连接到服务器并引用配置文件来测试 SSL/TLS。
前往包含密钥存储文件的目录。在本例中,密钥存储文件
exampleKeystore.pkcs12在服务器的standalone/configuration目录中生成。Example
cd JBOSS_HOME/standalone/configuration
$ cd JBOSS_HOME/standalone/configurationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用服务器证书创建客户端
trust-store。语法
keytool -importcert -keystore <trust_store_name> -storepass <password> -alias <alias> -trustcacerts -file <file_containing_server_certificate>
$ keytool -importcert -keystore <trust_store_name> -storepass <password> -alias <alias> -trustcacerts -file <file_containing_server_certificate>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file exampleKeystore.pem
$ keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file exampleKeystore.pemCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用了自签名证书,系统会提示您信任证书。
在文件中定义客户端 SSL 上下文,如
example-security.xml。语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 连接到服务器并发出命令。
Example
EAP_HOME/bin/jboss-cli.sh -c --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=<path_to_the_configuration_file>/example-security.xml :whoami
$ EAP_HOME/bin/jboss-cli.sh -c --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=<path_to_the_configuration_file>/example-security.xml :whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
{ "outcome" => "success", "result" => {"identity" => {"username" => "$local"}} }{ "outcome" => "success", "result" => {"identity" => {"username" => "$local"}} }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用浏览器验证 SSL/TLS。
如果您使用了自签名证书,浏览器会显示一个警告,表示服务器出示的证书未知。
检查证书,并验证浏览器中显示的指纹是否与密钥存储中的证书的指纹匹配。您可以使用以下命令查看生成的证书:
语法
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1:read-alias(alias="localhost")
/subsystem=elytron/key-store=key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1:read-alias(alias="localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以从向导的输出中获取密钥存储名称,例如 "key-store 为 key-store-a18ba30e-6a26-4ed6-87c5-feb7f3e4dff1"。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接受服务器证书后,会提示您输入登录凭证。您可以使用现有 JBoss EAP 用户的用户凭证登录。
现在为 JBoss EAP 管理界面启用了 SSL/TLS。
1.1.2. 使用 subsystem 命令为管理接口启用单向 SSL/TLS 复制链接链接已复制到粘贴板!
使用 elytron 子系统命令通过 SSL/TLS 保护 JBoss EAP 管理接口。
出于测试和开发目的,您可以使用自签名证书。您可以使用包含证书的现有密钥存储,或者在创建 key-store 资源时使用 Elytron 生成的密钥存储。对于生产环境,始终使用证书颁发机构(CA)签名证书。
不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。
先决条件
- JBoss EAP 正在运行。
流程
配置密钥存储以存储证书。
您可以提供到现有密钥存储的路径,例如,包含 CA 签名证书的路径,或者提供要创建的密钥存储的路径。
/subsystem=elytron/key-store=<keystore_name>:add(path=<path_to_keystore>, credential-reference=<credential_reference>, type=<keystore_type>)
/subsystem=elytron/key-store=<keystore_name>:add(path=<path_to_keystore>, credential-reference=<credential_reference>, type=<keystore_type>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleKeyStore:add(path=exampleserver.keystore.pkcs12, relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)/subsystem=elytron/key-store=exampleKeyStore:add(path=exampleserver.keystore.pkcs12, relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果密钥存储不包含任何证书,或者您使用上面的步骤来创建密钥存储,则必须生成证书并将证书存储在文件中。
在密钥存储中生成密钥对。
语法
/subsystem=elytron/key-store=<keystore_name>:generate-key-pair(alias=<keystore_alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validity_in_days>,credential-reference=<credential_reference>,distinguished-name="<distinguished_name>")
/subsystem=elytron/key-store=<keystore_name>:generate-key-pair(alias=<keystore_alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validity_in_days>,credential-reference=<credential_reference>,distinguished-name="<distinguished_name>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")/subsystem=elytron/key-store=exampleKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书存储在文件中。
语法
/subsystem=elytron/key-store=<keystore_name>:store()
/subsystem=elytron/key-store=<keystore_name>:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleKeyStore:store()
/subsystem=elytron/key-store=exampleKeyStore:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置引用
key-store的key-manager。语法
/subsystem=elytron/key-manager=<key-manager_name>:add(key-store=<key-store_name>,credential-reference=<credential_reference>)
/subsystem=elytron/key-manager=<key-manager_name>:add(key-store=<key-store_name>,credential-reference=<credential_reference>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-manager=exampleKeyManager:add(key-store=exampleKeyStore,credential-reference={clear-text=secret})/subsystem=elytron/key-manager=exampleKeyManager:add(key-store=exampleKeyStore,credential-reference={clear-text=secret})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要红帽没有指定 algorithm 属性,因为
elytron子系统使用KeyManagerFactory.getDefaultAlgorithm ()来默认确定算法。但是,您可以指定 algorithm 属性。要指定 algorithm 属性,您需要知道您使用的 Java Development Kit (JDK)提供哪些密钥管理器算法。例如,使用 Java 安全套接字扩展(SunJSSE)的 JDK 提供了 PKIX 和 SunX509 算法。
在命令中,您可以指定 SunX509 作为
key-manager算法属性。配置引用
key-manager的server-ssl-context。语法
/subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)
/subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/server-ssl-context=examplehttpsSSC:add(key-manager=exampleKeyManager, protocols=["TLSv1.2"])
/subsystem=elytron/server-ssl-context=examplehttpsSSC:add(key-manager=exampleKeyManager, protocols=["TLSv1.2"])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您需要确定您要支持的 SSL/TLS 协议。示例命令使用 TLSv1.2。
-
对于 TLSv1.2 及更早版本,请使用
cipher-suite-filter参数指定允许哪些密码套件。 -
对于 TLSv1.3,使用
cipher-suite-names参数指定允许哪些密码套件。TLSv1.3 默认禁用。如果您没有使用 protocol 属性指定协议,或者指定的集合包含 TLSv1.3,请配置cipher-suite-names启用 TLSv1.3。
使用
use-cipher-suites-order参数来遵循服务器密码套件顺序。use-cipher-suites-order属性默认设置为true。这与旧的 security 子系统行为不同,它默认为遵循客户端密码套件顺序。-
对于 TLSv1.2 及更早版本,请使用
更新管理界面,以使用配置的
server-ssl-context。语法
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=<server-ssl-context_name>) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=<server-ssl-context_name>) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=examplehttpsSSC) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=examplehttpsSSC) /core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=management-https)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新加载服务器。
reload
reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用自签名证书启用 SSL/TLS,管理 CLI 会提示您接受服务器提供的证书。这是您通过配置密钥存储的证书。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
T或P以继续连接。
验证
通过客户端连接来验证 SSL/TLS。
您可以通过在配置文件中放置 Elytron 客户端 SSL 上下文来测试 SSL/TLS,然后使用引用配置文件的管理 CLI 连接到服务器。
前往包含密钥存储文件的目录。在本例中,密钥存储文件
exampleserver.keystore.pkcs12在服务器的standalone/configuration目录中生成。Example
cd JBOSS_HOME/standalone/configuration
$ cd JBOSS_HOME/standalone/configurationCopy to Clipboard Copied! Toggle word wrap Toggle overflow 导出服务器证书,以便将其导入到客户端信任存储中。
keytool -export -alias <alias> -keystore <key_store> -storepass <keystore_password>-file <file_name>
$ keytool -export -alias <alias> -keystore <key_store> -storepass <keystore_password>-file <file_name>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
keytool -export -alias localhost -keystore exampleserver.keystore.pkcs12 -file -storepass secret server.cer
$ keytool -export -alias localhost -keystore exampleserver.keystore.pkcs12 -file -storepass secret server.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用服务器证书创建客户端
trust-store。语法
keytool -importcert -keystore <trust_store_name> -storepass <password> -alias <alias> -trustcacerts -file <file_containing_server_certificate>
$ keytool -importcert -keystore <trust_store_name> -storepass <password> -alias <alias> -trustcacerts -file <file_containing_server_certificate>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file server.cer
$ keytool -importcert -keystore client.truststore.pkcs12 -storepass secret -alias localhost -trustcacerts -file server.cerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 如果您使用了自签名证书,系统会提示您信任证书。
在文件中定义客户端 SSL 上下文,如
example-security.xml。语法
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 连接到服务器并发出命令。
Example
EAP_HOME/bin/jboss-cli.sh -c --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=example-security.xml :whoami
$ EAP_HOME/bin/jboss-cli.sh -c --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=example-security.xml :whoamiCopy to Clipboard Copied! Toggle word wrap Toggle overflow 预期输出
{ "outcome" => "success", "result" => {"identity" => {"username" => "$local"}} }{ "outcome" => "success", "result" => {"identity" => {"username" => "$local"}} }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
使用浏览器验证 SSL/TLS。
如果您使用了自签名证书,浏览器会显示一个警告,表示服务器出示的证书未知。
检查证书,并验证浏览器中显示的指纹是否与密钥存储中的证书的指纹匹配。您可以使用以下命令查看生成的证书:
语法
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleKeyStore:read-alias(alias="localhost")
/subsystem=elytron/key-store=exampleKeyStore:read-alias(alias="localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 接受服务器证书后,会提示您输入登录凭证。您可以使用现有 JBoss EAP 用户的用户凭证登录。
现在为 JBoss EAP 管理界面启用了 SSL/TLS。
1.1.3. 使用安全 命令为管理接口禁用 SSL/TLS 复制链接链接已复制到粘贴板!
使用 security 命令为管理界面禁用 SSL/TLS。您可能希望进行此操作,将不同的 SSL/TLS 配置用于配置的不同 SSL/TLS 配置。
使用 命令禁用 SSL/TLS 不会删除 Elytron 资源。命令只是取消定义 http-interface management-interface 资源的 secure-socket-binding 和 ssl-context 属性。
先决条件
- JBoss EAP 正在运行。
流程
在管理 CLI 中使用
disable-ssl-management命令。security disable-ssl-management
security disable-ssl-managementCopy to Clipboard Copied! Toggle word wrap Toggle overflow 服务器使用以下输出重新加载:
... Server reloaded. Reconnected to server. SSL disabled for http-interface
... Server reloaded. Reconnected to server. SSL disabled for http-interfaceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用以下方法之一为服务器管理接口启用 SSL/TLS:
- 使用向导为管理接口启用单向 SSL/TLS :使用此流程使用基于 CLI 的向导快速设置 SSL/TLS。Elytron 根据您的向导的输入创建所需资源。
- 使用子系统命令为管理接口启用单向 SSL/TLS :使用此流程配置必要的资源,以手动启用 SSL/TLS。手动配置资源可让您更好地控制服务器配置。
1.2. 为在 JBoss EAP 上部署的应用程序启用单向 SSL/TLS 复制链接链接已复制到粘贴板!
为 JBoss EAP 上部署的应用启用单向 SSL/TLS,因此 Web 浏览器等应用与客户端之间的通信是安全的。
要为在 JBoss EAP 上部署的应用程序启用单向 SSL/TLS,您可以使用以下步骤:
- 使用自动 生成的自签名证书为应用程序启用 SSL/TLS :仅在开发或测试环境中使用此流程。此流程可帮助您快速为应用程序启用 SSL/TLS,而无需进行任何配置。
- 使用向导为 JBoss EAP 上部署的应用程序启用单向 SSL/TLS :使用此流程使用基于 CLI 的向导来快速设置 SSL/TLS。Elytron 根据您的向导的输入创建所需资源。
- 使用子系统命令为应用程序启用单向 SSL/TLS :使用此方法配置所需资源以手动启用 SSL/TLS。手动配置资源可让您更好地控制服务器配置。
此外,您可以使用 安全命令禁用 SSL/TLS 的步骤,为 JBoss EAP 上部署的应用程序禁用 SSL/TLS。
1.2.1. Elytron 中的默认 SSL 上下文 复制链接链接已复制到粘贴板!
为了帮助开发人员为应用程序快速设置单向 SSL/TLS,elytron 子系统包含启用单向 SSL/TLS 所需的资源,默认准备在开发或测试环境中使用。
默认提供以下资源:
-
名为
applicationKS的key-store。 -
key-manager,名为applicationKM,引用key-store。 -
名为
applicationSSC的server-ssl-context,引用key-manager。
默认 TLS 配置
默认 key-manager applicationKM 包含一个 generate-self-signed-certificate-host 属性,值为 localhost。generate-self-signed-certificate-host 属性表示当使用此 key-manager 获取服务器证书时,如果支持其 key-store 的文件不存在,则 key-manager 应该自动生成自签名证书,并将 localhost 用作 通用名称。生成的自签名证书存储在支持 key-store 的文件中。
由于安装服务器时支持默认 key-store 的文件,只需向服务器发送 https 请求会生成自签名证书,并为应用程序启用单向 SSL/TLS。如需更多信息,请参阅使用自动生成的自签名证书为应用程序启用 SSL/TLS。
1.2.2. 使用自动生成的自签名证书为应用程序启用 SSL/TLS 复制链接链接已复制到粘贴板!
当服务器第一次收到 HTTPS 请求时,JBoss EAP 会自动生成自签名证书。elytron 子系统还包含可在开发或测试环境中使用的 key-store、key-manager 和 server-ssl-context 资源。因此,当 JBoss EAP 生成自签名证书后,应用程序就会使用证书进行保护。
不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。
先决条件
- JBoss EAP 正在运行。
流程
导航到端口
8443上的服务器 URL,例如 https://localhost:8443。JBoss EAP 在收到此请求时生成自签名证书。有关此证书的详情,您可以查看服务器日志。
浏览器会将连接标记为不安全,因为生成的证书是自签名的。
验证
将显示的证书 JBoss EAP 与浏览器与服务器日志中的证书进行比较。
服务器日志示例
17:50:24,086 WARN [org.wildfly.extension.elytron] (default task-1) WFLYELY01085: Generated self-signed certificate at /home/user1/Downloads/wildflies/wildfly-27.0.1.Final/standalone/configuration/application.keystore. Please note that self-signed certificates are not secure and should only be used for testing purposes. Do not use this self-signed certificate in production. SHA-1 fingerprint of the generated key is 11:2f:e7:8c:18:b7:2c:c1:b0:5a:ad:ea:83:e0:32:59:ba:73:91:e2 SHA-256 fingerprint of the generated key is b2:a4:ed:b0:5c:c2:a1:4c:ca:39:03:e8:3a:11:e4:c5:c4:81:9d:46:97:7c:e6:6f:0c:45:f6:5d:64:3f:0d:64
17:50:24,086 WARN [org.wildfly.extension.elytron] (default task-1) WFLYELY01085: Generated self-signed certificate at /home/user1/Downloads/wildflies/wildfly-27.0.1.Final/standalone/configuration/application.keystore. Please note that self-signed certificates are not secure and should only be used for testing purposes. Do not use this self-signed certificate in production. SHA-1 fingerprint of the generated key is 11:2f:e7:8c:18:b7:2c:c1:b0:5a:ad:ea:83:e0:32:59:ba:73:91:e2 SHA-256 fingerprint of the generated key is b2:a4:ed:b0:5c:c2:a1:4c:ca:39:03:e8:3a:11:e4:c5:c4:81:9d:46:97:7c:e6:6f:0c:45:f6:5d:64:3f:0d:64Copy to Clipboard Copied! Toggle word wrap Toggle overflow 向浏览器显示的证书示例
SHA-256 Fingerprint B2 A4 ED B0 5C C2 A1 4C CA 39 03 E8 3A 11 E4 C5 C4 81 9D 46 97 7C E6 6F 0C 45 F6 5D 64 3F 0D 64 SHA-1 Fingerprint 11 2F E7 8C 18 B7 2C C1 B0 5A AD EA 83 E0 32 59 BA 73 91 E2
SHA-256 Fingerprint B2 A4 ED B0 5C C2 A1 4C CA 39 03 E8 3A 11 E4 C5 C4 81 9D 46 97 7C E6 6F 0C 45 F6 5D 64 3F 0D 64 SHA-1 Fingerprint 11 2F E7 8C 18 B7 2C C1 B0 5A AD EA 83 E0 32 59 BA 73 91 E2Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果指纹匹配,如示例中,您可以继续进入该页面。
为应用程序启用 SSL/TLS。
1.2.3. 使用向导为 JBoss EAP 上部署的应用程序启用单向 SSL/TLS 复制链接链接已复制到粘贴板!
Elytron 提供了一个向导来快速设置 SSL/TLS。您可以使用包含证书的现有密钥存储,或者使用向导生成的密钥存储和自签名证书来启用 SSL/TLS。您还可以使用 --lets-encrypt 选项从 Let 的 Encrypt 证书颁发机构获取和使用证书。有关 Let's Encrypt 的详情,请查看 Let 的加密文档。
使用向导生成的自签名证书来启用 SSL/TLS,仅用于测试和开发目的。对于生产环境,始终使用证书颁发机构(CA)签名证书。
不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。
向导配置为应用程序启用 SSL/TLS 所需的以下资源:
-
key-store -
key-manager -
server-ssl-context -
然后,
server-ssl-context应用到 Undertowhttps-listener。
Elytron 将每个资源命名为 resource-type-UUID。例如,key-store-9e35a3be-62bb-4fff-afc2-2d8d141b82bc。通用唯一标识符(UUID)有助于避免资源的名称冲突。
先决条件
- JBoss EAP 正在运行。
流程
在管理 CLI 中输入以下命令来启动向导来为应用程序配置单向 SSL/TLS:
语法
security enable-ssl-http-server --interactive
security enable-ssl-http-server --interactiveCopy to Clipboard Copied! Toggle word wrap Toggle overflow 提示时输入所需信息。
使用
--lets-encrypt选项从 Let 的 Encrypt 证书颁发机构获取和使用证书。如果
server-ssl-context已存在,向导会退出,并显示以下信息:An SSL server context already exists on the HTTPS listener, use --override-ssl-context option to overwrite the existing SSL context
An SSL server context already exists on the HTTPS listener, use --override-ssl-context option to overwrite the existing SSL contextCopy to Clipboard Copied! Toggle word wrap Toggle overflow 注意elytron子系统默认包含一个已配置的server-ssl-context资源。因此,您必须在全新安装后第一次启动向导时使用--override-ssl-context选项。如需更多信息,请参阅 Elytron 中的默认 SSL 上下文。
如果您覆盖现有的
server-ssl-context,Elytron 将使用向导创建的server-ssl-context来启用 SSL。注意要启用单向 SSL/TLS,请在提示启用 SSL 相互身份验证时输入
n或 blank。设置 mutual 身份验证可启用双向 SSL/TLS。启动向导示例
security enable-ssl-http-server --interactive --override-ssl-context
security enable-ssl-http-server --interactive --override-ssl-contextCopy to Clipboard Copied! Toggle word wrap Toggle overflow 向导提示输入示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
y后,服务器会使用以下输出重新载入:Server reloaded. SSL enabled for default-server ssl-context is ssl-context-4cba6678-c464-4dcc-90ff-9295312ac395 key-manager is key-manager-4cba6678-c464-4dcc-90ff-9295312ac395 key-store is key-store-4cba6678-c464-4dcc-90ff-9295312ac395
Server reloaded. SSL enabled for default-server ssl-context is ssl-context-4cba6678-c464-4dcc-90ff-9295312ac395 key-manager is key-manager-4cba6678-c464-4dcc-90ff-9295312ac395 key-store is key-store-4cba6678-c464-4dcc-90ff-9295312ac395Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
如果您使用了自签名证书,浏览器会显示一个警告,表示服务器出示的证书未知。
检查证书,并验证浏览器中显示的指纹是否与密钥存储中的证书的指纹匹配。您可以使用以下命令查看生成的证书:
语法
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=key-store-4cba6678-c464-4dcc-90ff-9295312ac395:read-alias(alias="localhost")
/subsystem=elytron/key-store=key-store-4cba6678-c464-4dcc-90ff-9295312ac395:read-alias(alias="localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 您可以从向导的输出中获取密钥存储名称,例如 "key-store 为 key-store-4cba6678-c464-4dcc-90ff-9295312ac395"。
输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,在 JBoss EAP 上部署的应用程序启用了 SSL/TLS。
1.2.4. 使用 subsystem 命令为应用程序启用单向 SSL/TLS 复制链接链接已复制到粘贴板!
使用 elytron 子系统命令,使用 SSL/TLS 保护在 JBoss EAP 上部署的应用。
出于测试和开发目的,您可以使用自签名证书。您可以使用包含证书的现有密钥存储,或者在创建 key-store 资源时使用 Elytron 生成的密钥存储。对于生产环境,始终使用证书颁发机构(CA)签名证书。
不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。
先决条件
- JBoss EAP 正在运行。
流程
配置密钥存储以存储证书。
您可以提供到现有密钥存储的路径,例如,包含 CA 签名证书的路径,或者提供要创建的密钥存储的路径。
/subsystem=elytron/key-store=<keystore_name>:add(path=<path_to_keystore>, credential-reference=<credential_reference>, type=<keystore_type>)
/subsystem=elytron/key-store=<keystore_name>:add(path=<path_to_keystore>, credential-reference=<credential_reference>, type=<keystore_type>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleKeyStore:add(path=exampleserver.keystore.pkcs12, relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)/subsystem=elytron/key-store=exampleKeyStore:add(path=exampleserver.keystore.pkcs12, relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 如果密钥存储不包含任何证书,或者您使用上面的步骤来创建密钥存储,则必须生成证书并将证书存储在文件中。
在密钥存储中生成密钥对。
语法
/subsystem=elytron/key-store=<keystore_name>:generate-key-pair(alias=<keystore_alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validity_in_days>,credential-reference=<credential_reference>,distinguished-name="<distinguished_name>")
/subsystem=elytron/key-store=<keystore_name>:generate-key-pair(alias=<keystore_alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validity_in_days>,credential-reference=<credential_reference>,distinguished-name="<distinguished_name>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")/subsystem=elytron/key-store=exampleKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将证书存储在文件中。
语法
/subsystem=elytron/key-store=<keystore_name>:store()
/subsystem=elytron/key-store=<keystore_name>:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleKeyStore:store()
/subsystem=elytron/key-store=exampleKeyStore:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置引用
key-store的key-manager。语法
/subsystem=elytron/key-manager=<key-manager_name>:add(key-store=<key-store_name>,credential-reference=<credential_reference>)
/subsystem=elytron/key-manager=<key-manager_name>:add(key-store=<key-store_name>,credential-reference=<credential_reference>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-manager=exampleKeyManager:add(key-store=exampleKeyStore,credential-reference={clear-text=secret})/subsystem=elytron/key-manager=exampleKeyManager:add(key-store=exampleKeyStore,credential-reference={clear-text=secret})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要红帽没有指定 algorithm 属性,因为
elytron子系统使用KeyManagerFactory.getDefaultAlgorithm ()来默认确定算法。但是,您可以指定 algorithm 属性。要指定 algorithm 属性,您需要知道您使用的 Java Development Kit (JDK)提供哪些密钥管理器算法。例如,使用 Java 安全套接字扩展(SunJSSE)的 JDK 提供了 PKIX 和 SunX509 算法。
在命令中,您可以指定 SunX509 作为
key-manager算法属性。配置引用
key-manager的server-ssl-context。语法
/subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)
/subsystem=elytron/server-ssl-context=<server-ssl-context_name>:add(key-manager=<key-manager_name>, protocols=<list_of_protocols>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/server-ssl-context=examplehttpsSSC:add(key-manager=exampleKeyManager, protocols=["TLSv1.2"])
/subsystem=elytron/server-ssl-context=examplehttpsSSC:add(key-manager=exampleKeyManager, protocols=["TLSv1.2"])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重要您需要确定您要支持的 SSL/TLS 协议。示例命令使用 TLSv1.2。
-
对于 TLSv1.2 及更早版本,请使用
cipher-suite-filter参数指定允许哪些密码套件。 -
对于 TLSv1.3,使用
cipher-suite-names参数指定允许哪些密码套件。TLSv1.3 默认禁用。如果您没有使用 protocol 属性指定协议,或者指定的集合包含 TLSv1.3,请配置cipher-suite-names启用 TLSv1.3。
使用
use-cipher-suites-order参数来遵循服务器密码套件顺序。use-cipher-suites-order属性默认设置为true。这与旧的 security 子系统行为不同,它默认为遵循客户端密码套件顺序。-
对于 TLSv1.2 及更早版本,请使用
更新 Undertow,以使用配置的
server-ssl-context。语法
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=<server-ssl-context_name>)
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=<server-ssl-context_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=examplehttpsSSC)
/subsystem=undertow/server=default-server/https-listener=https:write-attribute(name=ssl-context, value=examplehttpsSSC)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新加载服务器。
reload
reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
如果您使用了自签名证书,浏览器会显示一个警告,表示服务器出示的证书未知。
检查证书,并验证浏览器中显示的指纹是否与密钥存储中的证书的指纹匹配。您可以使用以下命令查看生成的证书:
语法
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleKeyStore:read-alias(alias=localhost)
/subsystem=elytron/key-store=exampleKeyStore:read-alias(alias=localhost)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,在 JBoss EAP 上部署的应用程序启用了 SSL/TLS。
1.2.5. 使用 security 命令为应用程序禁用 SSL/TLS 复制链接链接已复制到粘贴板!
使用 security 命令为 JBoss EAP 上部署的应用程序禁用 SSL/TLS。使用 命令禁用 SSL/TLS 不会删除 Elytron 资源。命令仅将服务器的 ssl-context 设置为其默认值 applicationSSC。
先决条件
- JBoss EAP 正在运行。
流程
在管理 CLI 中使用
security disable-ssl-http-server命令。security disable-ssl-http-server
security disable-ssl-http-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow 服务器使用以下输出重新加载:
... Server reloaded. SSL disabled for default-server
... Server reloaded. SSL disabled for default-serverCopy to Clipboard Copied! Toggle word wrap Toggle overflow
您可以使用以下流程之一为在 JBoss EAP 上部署的应用程序启用 SSL/TLS:
- 使用自动 生成的自签名证书为应用程序启用 SSL/TLS :仅在开发或测试环境中使用此流程。此流程可帮助您快速为应用程序启用 SSL/TLS,而无需进行任何配置。
- 使用向导为 JBoss EAP 上部署的应用程序启用单向 SSL/TLS :使用此流程使用基于 CLI 的向导来快速设置 SSL/TLS。Elytron 根据您的向导的输入创建所需资源。
- 使用子系统命令为应用程序启用单向 SSL/TLS :使用此方法配置所需资源以手动启用 SSL/TLS。手动配置资源可让您更好地控制服务器配置。
第 2 章 为管理界面和应用程序启用双向 SSL/TLS 复制链接链接已复制到粘贴板!
SSL/TLS 或传输层安全(TLS)是基于证书的安全协议,用于保护通过网络通信的两个实体之间的数据传输。如果您希望服务器只与可信客户端连接时,请使用双向 SSL/TLS。
双向 SSL/TLS 提供以下安全功能:
- 身份验证
- 在单向 SSL/TLS 中,服务器向客户端提供证书以验证其自身。在双向 SSL/TLS 中,客户端还向服务器提供证书来验证客户端。因此,双向 SSL/TLS 也称为 mutual 身份验证。
- 保密性
- 在客户端和服务器间传输的数据会被加密。
- 数据完整性
-
TLS 协议提供具有安全哈希功能的数据完整性,用于消息身份验证代码(MAC)计算。您可以使用 SSL 上下文资源的 cipher-suite-
filter 和属性为连接强制实施特定的算法和哈希功能。cipher-suite-names
如需更多信息,请参阅 server-ssl-context 属性。
您可以使用双向 SSL/TLS 保护 JBoss EAP 管理接口和部署的应用程序。
要使用双向 SSL/TLS 保护管理接口,请使用以下流程:
- 从客户端的证书颁发机构(CA)获取证书。另外,对于非生产环境,您可以按照以下步骤生成自签名证书: 生成客户端证书。
- 为客户端证书配置信任存储和信任管理器
- 为双向 SSL/TLS 配置服务器证书。
- 配置 SSL 上下文以使用 SSL/TLS 保护 JBoss EAP 管理接口
要使用双向 SSL/TLS 保护在 JBoss EAP 上部署的应用程序,请使用以下流程:
- 从客户端的证书颁发机构(CA)获取证书。另外,对于非生产环境,您可以按照以下步骤生成自签名证书: 生成客户端证书。
- 为客户端证书配置信任存储和信任管理器
- 为双向 SSL/TLS 配置服务器证书
- 配置 SSL 上下文,以使用 SSL/TLS 保护在 JBoss EAP 上部署的应用程序
您可以按照在 Elytron 中配置证书撤销检查中的步骤来配置证书撤销检查。
2.1. 生成客户端证书 复制链接链接已复制到粘贴板!
在 CLI 中使用 keytool 命令生成自签名客户端证书,以测试和开发双向 SSL/TLS 配置。
不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。
流程
生成客户端证书。
语法
keytool -genkeypair -alias <keystore_alias> -keyalg <algorithm> -keysize <key_size> -validity <validity_in_days> -keystore <keystore_name> -dname "<distinguished_name>" -keypass <private_key_password> -storepass <keystore_password>
$ keytool -genkeypair -alias <keystore_alias> -keyalg <algorithm> -keysize <key_size> -validity <validity_in_days> -keystore <keystore_name> -dname "<distinguished_name>" -keypass <private_key_password> -storepass <keystore_password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
keytool -genkeypair -alias exampleClientKeyStore -keyalg RSA -keysize 2048 -validity 365 -keystore exampleclient.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secret
$ keytool -genkeypair -alias exampleClientKeyStore -keyalg RSA -keysize 2048 -validity 365 -keystore exampleclient.keystore.pkcs12 -dname "CN=client" -keypass secret -storepass secretCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将客户端证书导出到文件。
语法
keytool -exportcert -keystore <keystore_name> -alias <keystore_alias> -keypass <private_key_password> -storepass <keystore_password> -file <file_path>
$ keytool -exportcert -keystore <keystore_name> -alias <keystore_alias> -keypass <private_key_password> -storepass <keystore_password> -file <file_path>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
keytool -exportcert -keystore exampleclient.keystore.pkcs12 -alias exampleClientKeyStore -keypass secret -storepass secret -file EAP_HOME/standalone/configuration/client.cer Certificate stored in file <EAP_HOME/standalone/configuration/client.cer>
$ keytool -exportcert -keystore exampleclient.keystore.pkcs12 -alias exampleClientKeyStore -keypass secret -storepass secret -file EAP_HOME/standalone/configuration/client.cer Certificate stored in file <EAP_HOME/standalone/configuration/client.cer>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,您可以使用生成的客户端证书在服务器中配置服务器信任存储和信任管理器。如需更多信息,请参阅为客户端证书配置信任存储和信任管理器。
2.2. 为客户端证书配置信任存储和信任管理器 复制链接链接已复制到粘贴板!
使用客户端证书和信任管理器配置信任存储,并引用信任存储,以便在 TLS 握手期间验证客户端证书。
先决条件
您已获取或生成了客户端证书。
如需更多信息,请参阅生成客户端证书。
- JBoss EAP 正在运行。
流程
使用管理 CLI 使用客户端证书配置信任存储。
创建服务器信任存储,以存储要信任的客户端证书。
语法
/subsystem=elytron/key-store=<server_trust_store_name>:add(path=<path_to_server_trust_store_file>,credential-reference={<password>})/subsystem=elytron/key-store=<server_trust_store_name>:add(path=<path_to_server_trust_store_file>,credential-reference={<password>})Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerTrustStore:add(path=exampleTLSServer.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret}) {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerTrustStore:add(path=exampleTLSServer.truststore,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret}) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 通过指定客户端证书别名,将客户端证书导入到服务器信任存储中。只有提供服务器信任存储信任的证书的客户端才能连接到服务器。
注意如果您使用自签名证书配置双向 SSL/TLS,请将
validate设置为false,因为证书没有信任链。如果您要使用 CA 签名的证书在生产环境中配置双向 SSL/TLS,请将
validate设置为true。语法
/subsystem=elytron/key-store=<server_trust_store_name>:import-certificate(alias=<alias>,path=<certificate_file>,credential-reference={<password>},trust-cacerts=<true_or_false>,validate=<true_false>)/subsystem=elytron/key-store=<server_trust_store_name>:import-certificate(alias=<alias>,path=<certificate_file>,credential-reference={<password>},trust-cacerts=<true_or_false>,validate=<true_false>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerTrustStore:import-certificate(alias=client,path=client.cer,relative-to=jboss.server.config.dir,credential-reference={clear-text=serverTrustSecret},trust-cacerts=true,validate=false) {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerTrustStore:import-certificate(alias=client,path=client.cer,relative-to=jboss.server.config.dir,credential-reference={clear-text=serverTrustSecret},trust-cacerts=true,validate=false) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将客户端证书导出到信任存储文件中。
语法
/subsystem=elytron/key-store=<server_trust_store_name>:store()
/subsystem=elytron/key-store=<server_trust_store_name>:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerTrustStore:store() { "outcome" => "success", "result" => undefined }/subsystem=elytron/key-store=exampleServerTrustStore:store() { "outcome" => "success", "result" => undefined }Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置信任管理器,以在 TLS 握手过程中验证客户端证书。
语法
/subsystem=elytron/trust-manager=<trust_manager_name>:add(key-store=<server_trust_store_name>)
/subsystem=elytron/trust-manager=<trust_manager_name>:add(key-store=<server_trust_store_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/trust-manager=exampleTLSTrustManager:add(key-store=exampleServerTrustStore) {"outcome" => "success"}/subsystem=elytron/trust-manager=exampleTLSTrustManager:add(key-store=exampleServerTrustStore) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置的信任存储中的客户端证书用于验证客户端在与服务器的 TLS 握手期间显示的证书。
2.3. 为双向 SSL/TLS 配置服务器证书 复制链接链接已复制到粘贴板!
配置服务器证书,它会在 TLS 握手期间提供给客户端。
先决条件
- JBoss EAP 正在运行。
流程
生成用于测试和开发目的的自签名服务器证书。如果您已从证书颁发机构(CA)获取证书,请跳过这一步。
重要不要在生产环境中使用自签名证书。仅使用证书颁发机构(CA)签名的证书。
创建用于存储服务器证书的密钥存储。
语法
/subsystem=elytron/key-store=<key_store_name>:add(path=<path>,credential-reference={<password>},type=<key_store_type>)/subsystem=elytron/key-store=<key_store_name>:add(path=<path>,credential-reference={<password>},type=<key_store_type>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerKeyStore:add(path=server.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12) {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerKeyStore:add(path=server.keystore.pkcs12,relative-to=jboss.server.config.dir,credential-reference={clear-text=secret},type=PKCS12) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在密钥存储中生成服务器证书。
语法
/subsystem=elytron/key-store=<key_store_name>:generate-key-pair(alias=<alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validaity_in_days>,credential-reference={<password>},distinguished-name="<distinguished_name_in_certificate>")/subsystem=elytron/key-store=<key_store_name>:generate-key-pair(alias=<alias>,algorithm=<algorithm>,key-size=<key_size>,validity=<validaity_in_days>,credential-reference={<password>},distinguished-name="<distinguished_name_in_certificate>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost") {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerKeyStore:generate-key-pair(alias=localhost,algorithm=RSA,key-size=2048,validity=365,credential-reference={clear-text=secret},distinguished-name="CN=localhost") {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将密钥存储存储到文件中。
语法
/subsystem=elytron/key-store=<key_store_name>:store()
/subsystem=elytron/key-store=<key_store_name>:store()Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerKeyStore:store() { "outcome" => "success", "result" => undefined }/subsystem=elytron/key-store=exampleServerKeyStore:store() { "outcome" => "success", "result" => undefined }Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导出服务器证书。
语法
/subsystem=elytron/key-store=<key_store_name>:export-certificate(alias=<alias>,path=<path_to_certificate>,pem=true)
/subsystem=elytron/key-store=<key_store_name>:export-certificate(alias=<alias>,path=<path_to_certificate>,pem=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerKeyStore:export-certificate(alias=localhost,path=server.cer,pem=true,relative-to=jboss.server.config.dir) {"outcome" => "success"}/subsystem=elytron/key-store=exampleServerKeyStore:export-certificate(alias=localhost,path=server.cer,pem=true,relative-to=jboss.server.config.dir) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow
创建引用服务器密钥存储的密钥管理器。
语法
/subsystem=elytron/key-manager=<key_manager_name>:add(credential-reference={<password>},key-store=<key_store_name>)/subsystem=elytron/key-manager=<key_manager_name>:add(credential-reference={<password>},key-store=<key_store_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-manager=exampleServerKeyManager:add(credential-reference={clear-text=secret},key-store=exampleServerKeyStore) {"outcome" => "success"}/subsystem=elytron/key-manager=exampleServerKeyManager:add(credential-reference={clear-text=secret},key-store=exampleServerKeyStore) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 当启用 SSL/TLS 时,服务器会向客户端显示此证书。
将服务器证书导入到客户端的信任存储中,以便客户端可以在 SSL 握手期间验证服务器证书。
语法
keytool -import -file <server_certificate_file> -alias <alias> -keystore <client_trust_store_file> -storepass <password>
$ keytool -import -file <server_certificate_file> -alias <alias> -keystore <client_trust_store_file> -storepass <password>Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
yes。您将获得以下输出:Certificate was added to keystore
Certificate was added to keystoreCopy to Clipboard Copied! Toggle word wrap Toggle overflow
2.4. 配置 SSL 上下文以使用 SSL/TLS 保护 JBoss EAP 管理接口 复制链接链接已复制到粘贴板!
使用双向 SSL/TLS 保护 JBoss EAP 管理接口,以便只有提供服务器信任的证书的客户端才能连接到服务器的管理界面。
先决条件
- JBoss EAP 正在运行。
您已为客户端证书配置了服务器信任存储和信任管理器。
如需更多信息,请参阅为客户端证书配置信任存储和信任管理器。
您已配置了服务器证书。
如需更多信息,请参阅为 SSL/TLS 配置服务器证书
流程
配置服务器 SSL 上下文以启用双向 SSL。
语法
/subsystem=elytron/server-ssl-context=<server_ssl_context_name>:add(key-manager=<key_manager_name>,trust-manager=<trust_manager_name>,need-client-auth=true)
/subsystem=elytron/server-ssl-context=<server_ssl_context_name>:add(key-manager=<key_manager_name>,trust-manager=<trust_manager_name>,need-client-auth=true)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/server-ssl-context=exampleServerSSLContext:add(key-manager=exampleServerKeyManager,trust-manager=exampleTLSTrustManager,need-client-auth=true) {"outcome" => "success"}/subsystem=elytron/server-ssl-context=exampleServerSSLContext:add(key-manager=exampleServerKeyManager,trust-manager=exampleTLSTrustManager,need-client-auth=true) {"outcome" => "success"}Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,SSL 上下文使用 TLSv1.2。您可以将 protocol 属性
配置为使用TLSv1.3,如下所示:语法
/subsystem=elytron/server-ssl-context=<server-ssl-context-name>:add(key-manager=<key_manager_name>,trust-manager=<trust_manager_name>,need-client-auth=true,protocols=[TLSv1.3])
/subsystem=elytron/server-ssl-context=<server-ssl-context-name>:add(key-manager=<key_manager_name>,trust-manager=<trust_manager_name>,need-client-auth=true,protocols=[TLSv1.3])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加对用于 http 管理界面的 SSLContext 的引用。
语法
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=<server_ssl_context_name>)
/core-service=management/management-interface=http-interface:write-attribute(name=ssl-context, value=<server_ssl_context_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 定义用于 HTTPS 管理接口套接字的套接字绑定配置。
语法
/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=<socket_binding>)
/core-service=management/management-interface=http-interface:write-attribute(name=secure-socket-binding, value=<socket_binding>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新加载服务器。
reload ... Accept certificate? [N]o, [T]emporarily, [P]ermanently :
reload ... Accept certificate? [N]o, [T]emporarily, [P]ermanently :Copy to Clipboard Copied! Toggle word wrap Toggle overflow 输入
T或P以接受由服务器临时或永久提供的证书。管理 CLI 断开连接,因为它需要提供客户端证书。
验证
验证管理控制台是否受到保护。
使用 CLI 验证:
语法
curl --verbose --location --cacert <server_certificate> --cert <client_keystore>:<password> --cert-type P12 https://localhost:9993
$ curl --verbose --location --cacert <server_certificate> --cert <client_keystore>:<password> --cert-type P12 https://localhost:9993Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
curl --verbose --location --cacert server.cer --cert EAP_HOME/standalone/configuration/exampleclient.keystore.pkcs12:secret --cert-type P12 https://localhost:9993 ... < HTTP/1.1 200 OK ...
$ curl --verbose --location --cacert server.cer --cert EAP_HOME/standalone/configuration/exampleclient.keystore.pkcs12:secret --cert-type P12 https://localhost:9993 ... < HTTP/1.1 200 OK ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用浏览器进行验证。
将客户端证书导入到您的浏览器中。生成客户端证书过程中创建的示例证书 称为
exampleclient.keystore.pkcs12,以及用于导入它的示例密码是secret。有关将证书导入到浏览器的信息,请参阅浏览器的文档。
在浏览器中打开
https://localhost:9993。浏览器提示您显示与服务器相关的证书。
选择您导入到浏览器的证书。例如:
exampleclient.keystore.pkcs12。如果您使用自签名证书,浏览器会显示一个警告,表示服务器出示的证书未知。
检查证书,并验证浏览器中显示的指纹是否与密钥存储中的证书的指纹匹配。您可以使用以下命令在密钥存储中查看证书:
语法
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerKeyStore:read-alias(alias=localhost) ... "sha-1-digest" => "5e:3e:ad:c8:df:d7:f6:63:38:05:e2:a3:a7:31:07:82:c8:c8:94:47", "sha-256-digest" => "11:b6:8f:00:42:e1:7f:6c:16:ef:db:08:5e:13:d9:b8:16:6e:a0:3c:2e:d4:e5:fd:cb:53:90:88:d2:9c:b1:99",
/subsystem=elytron/key-store=exampleServerKeyStore:read-alias(alias=localhost) ... "sha-1-digest" => "5e:3e:ad:c8:df:d7:f6:63:38:05:e2:a3:a7:31:07:82:c8:c8:94:47", "sha-256-digest" => "11:b6:8f:00:42:e1:7f:6c:16:ef:db:08:5e:13:d9:b8:16:6e:a0:3c:2e:d4:e5:fd:cb:53:90:88:d2:9c:b1:99",Copy to Clipboard Copied! Toggle word wrap Toggle overflow
接受服务器证书后,会提示您输入登录凭证。您可以使用现有 JBoss EAP 用户的用户凭证登录。
验证管理 CLI 是否受到保护。
使用以下内容创建文件
wildfly-config.xml:Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意您可以在
key-store-clear-password元素中使用屏蔽的密码来代替明文处理。通过提供客户端证书来访问管理 CLI。
./jboss-cli.sh --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=/path/to/wildfly-config.xml --connect
$ ./jboss-cli.sh --controller=remote+https://127.0.0.1:9993 -Dwildfly.config.url=/path/to/wildfly-config.xml --connectCopy to Clipboard Copied! Toggle word wrap Toggle overflow
两种客户端:客户端的 Web 浏览器和管理 CLI,信任服务器证书,并且服务器信任这两个客户端。客户端和服务器之间的通信通过 SSL/TLS。
Elytron 提供名为 applicationSSC 的默认 server-ssl-context,可用于配置 SSL/TLS。另外,您可以在 Elytron 中创建自己的 SSL 上下文。以下流程演示了使用默认的 SSL 上下文 - applicationSSC 来为应用程序配置 SSL/TLS。
先决条件
- JBoss EAP 正在运行。
您已为客户端证书配置了服务器信任存储和信任管理器。
如需更多信息,请参阅为客户端证书配置信任存储和信任管理器。
您已配置了服务器证书。
如需更多信息,请参阅为 SSL/TLS 配置服务器证书
流程
配置默认服务器 SSL 上下文以启用双向 SSL。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 默认情况下,SSL 上下文使用 TLSv1.2。您可以将 protocol 属性
配置为使用TLSv1.3,如下所示:/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=protocols,value=[TLSv1.3])
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=protocols,value=[TLSv1.3])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为服务器 SSL 上下文配置信任管理器。
语法
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=trust-manager,value=<server_trust_manager>)
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=trust-manager,value=<server_trust_manager>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 配置服务器 SSL 上下文的密钥管理器。
语法
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=key-manager,value=<key_manager_name>)
/subsystem=elytron/server-ssl-context=applicationSSC:write-attribute(name=key-manager,value=<key_manager_name>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 重新加载服务器。
reload
reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
验证您可以访问 JBoss EAP 欢迎页面。
使用 CLI 验证:
语法
curl --verbose --location --cacert <server_certificate> --cert <client_keystore>:<password> --cert-type P12 https://localhost:8443
$ curl --verbose --location --cacert <server_certificate> --cert <client_keystore>:<password> --cert-type P12 https://localhost:8443Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
curl --verbose --location --cacert server.cer --cert exampleclient.keystore.pkcs12:secret --cert-type P12 https://localhost:8443 ... <h3>Your Red Hat JBoss Enterprise Application Platform is running.</h3> ...
$ curl --verbose --location --cacert server.cer --cert exampleclient.keystore.pkcs12:secret --cert-type P12 https://localhost:8443 ... <h3>Your Red Hat JBoss Enterprise Application Platform is running.</h3> ...Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用浏览器进行验证。
将客户端证书导入到您的浏览器中。生成客户端证书过程中创建的示例证书 称为
exampleclient.keystore.pkcs12,以及用于导入它的示例密码是secret。有关将证书导入到浏览器的信息,请参阅浏览器的文档。
在浏览器中打开
https://localhost:8443。浏览器提示您显示与服务器相关的证书。
选择您导入到浏览器的证书。例如:
exampleclient.keystore.pkcs12。如果您使用自签名证书,浏览器会显示一个警告,表示服务器出示的证书未知。
检查证书,并验证浏览器中显示的指纹是否与密钥存储中的证书的指纹匹配。您可以使用以下命令在密钥存储中查看证书:
语法
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)
/subsystem=elytron/key-store=<server_keystore_name>:read-alias(alias=<alias>)Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/key-store=exampleServerKeyStore:read-alias(alias=localhost) ... "sha-1-digest" => "5e:3e:ad:c8:df:d7:f6:63:38:05:e2:a3:a7:31:07:82:c8:c8:94:47", "sha-256-digest" => "11:b6:8f:00:42:e1:7f:6c:16:ef:db:08:5e:13:d9:b8:16:6e:a0:3c:2e:d4:e5:fd:cb:53:90:88:d2:9c:b1:99",
/subsystem=elytron/key-store=exampleServerKeyStore:read-alias(alias=localhost) ... "sha-1-digest" => "5e:3e:ad:c8:df:d7:f6:63:38:05:e2:a3:a7:31:07:82:c8:c8:94:47", "sha-256-digest" => "11:b6:8f:00:42:e1:7f:6c:16:ef:db:08:5e:13:d9:b8:16:6e:a0:3c:2e:d4:e5:fd:cb:53:90:88:d2:9c:b1:99",Copy to Clipboard Copied! Toggle word wrap Toggle overflow
接受服务器证书后,您可以访问 JBoss EAP 欢迎页面。
现在为应用程序配置了双向 SSL/TLS。
第 3 章 在 Elytron 中配置证书撤销检查 复制链接链接已复制到粘贴板!
为确保在 Elytron 或 Elytron 客户端不信任其过期日期之前发出证书颁发机构(CA)撤销的证书,请配置证书撤销检查。您可以使用证书撤销列表(CRL)或在线证书状态协议(OCSP)响应程序进行证书撤销检查。如果您不想下载整个 CRL,请使用 OCSP。
3.1. 使用证书撤销列表配置证书撤销检查 复制链接链接已复制到粘贴板!
使用 Elytron 信任管理器中的证书撤销列表(CRL)配置证书撤销检查,用于启用双向 SSL/TLS,以便在 Elytron 不信任证书颁发机构(CA)之前通过发出证书颁发机构(CA)撤销的证书。
先决条件
- JBoss EAP 正在运行。
配置了信任管理器。
如需更多信息,请参阅为客户端证书配置信任存储和信任管理器。
流程
使用以下步骤之一将信任管理器配置为使用 CRL:
配置信任管理器,以使用从证书中引用的分布点获取的 CRL。
语法
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=certificate-revocation-lists,value=[])
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=certificate-revocation-lists,value=[])Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=certificate-revocation-lists,value=[])
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=certificate-revocation-lists,value=[])Copy to Clipboard Copied! Toggle word wrap Toggle overflow 覆盖从证书中引用的分布点获取的 CRL。
语法
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=certificate-revocation-lists,value=[{path="<CRL-file-1>"},{path="<CRL-file-2>"},...,{path="<CRL-file-N>"}])/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=certificate-revocation-lists,value=[{path="<CRL-file-1>"},{path="<CRL-file-2>"},...,{path="<CRL-file-N>"}])Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=certificate-revocation-lists,value=[{path="intermediate.crl.pem"}])/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=certificate-revocation-lists,value=[{path="intermediate.crl.pem"}])Copy to Clipboard Copied! Toggle word wrap Toggle overflow
配置信任管理器,以使用 CRL 进行证书撤销检查。
如果还为证书撤销检查配置了 OCSP 响应程序,请在信任管理器中添加值为
true的属性ocsp.prefer-crls,以使用 CRL 进行证书撤销检查:语法
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp.prefer-crls,value="true")
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp.prefer-crls,value="true")Copy to Clipboard Copied! Toggle word wrap Toggle overflow Example
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp.prefer-crls,value="true")
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp.prefer-crls,value="true")Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 如果没有为证书撤销检查配置 OCSP 响应程序,则配置已完成。
3.2. 在 Elytron 中使用 OCSP 配置证书撤销检查 复制链接链接已复制到粘贴板!
配置用于启用双向 SSL/TLS 的信任管理器,以使用在线证书状态协议(OCSP)响应程序进行证书撤销检查。OCSP 在 RFC6960 中定义。
当为证书撤销检查配置 OCSP 响应程序和 CRL 时,默认会调用 OCSP 响应程序。
先决条件
- JBoss EAP 正在运行。
配置了信任管理器。
如需更多信息,请参阅为客户端证书配置信任存储和信任管理器。
流程
使用以下任一步骤,使用 OCSP 配置信任管理器:
将信任管理器配置为使用证书中定义的 OCSP 响应程序进行证书撤销检查。
语法
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp,value={})/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp,value={})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp,value={})/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp,value={})Copy to Clipboard Copied! Toggle word wrap Toggle overflow 覆盖证书中定义的 OCSP 响应程序。
语法
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp.responder,value="<ocsp_responeder_url>")
/subsystem=elytron/trust-manager=<trust_manager_name>:write-attribute(name=ocsp.responder,value="<ocsp_responeder_url>")Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp.responder,value="http://example.com/ocsp-responder")
/subsystem=elytron/trust-manager=exampleTLSTrustManager:write-attribute(name=ocsp.responder,value="http://example.com/ocsp-responder")Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3. 在 Elytron 客户端中使用 CRL 配置证书撤销检查 复制链接链接已复制到粘贴板!
使用 Elytron 客户端中的证书撤销列表(CRL)配置证书撤销检查,以便在客户端不信任其过期日期前由发出证书颁发机构(CA)撤销的证书。
先决条件
-
您已为 Elytron 客户端创建了
wildfly-config.xml文件。
流程
在
wildfly-config.xml文件中的 <ssl-context> 元素中添加以下内容:语法
<certificate-revocation-lists> <certificate-revocation-list path="${path_to_crl}"/> </certificate-revocation-lists><certificate-revocation-lists> <certificate-revocation-list path="${path_to_crl}"/> </certificate-revocation-lists>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
<certificate-revocation-lists> <certificate-revocation-list path="/server/ca/crl/revoked.pem"/> </certificate-revocation-lists><certificate-revocation-lists> <certificate-revocation-list path="/server/ca/crl/revoked.pem"/> </certificate-revocation-lists>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.4. 在 Elytron 客户端中使用 OCSP 配置证书撤销检查 复制链接链接已复制到粘贴板!
在 Elytron 客户端中使用在线证书状态协议(OCSP)配置证书撤销检查,以便在客户端不信任其过期日期前由发出证书颁发机构(CA)撤销的证书。当使用 OCSP 响应程序时,您不必下载整个 CRL。
先决条件
-
您已为 Elytron 客户端创建了
wildfly-config.xml文件。
流程
在 wildfly-config.xml 中的 <
ssl-context> 元素中添加以下内容:语法
<ocsp responder="${ocsp_responder_uri}" responder-certificate=”${alias_of_ocsp_responder_certificate}” responder-keystore=”${keystore_for_ocsp_responder_certificate}” /><ocsp responder="${ocsp_responder_uri}" responder-certificate=”${alias_of_ocsp_responder_certificate}” responder-keystore=”${keystore_for_ocsp_responder_certificate}” />Copy to Clipboard Copied! Toggle word wrap Toggle overflow 示例
<ocsp />
<ocsp />Copy to Clipboard Copied! Toggle word wrap Toggle overflow
第 4 章 在 JBoss EAP 客户端中使用 Elytron 客户端默认 SSLcontext 安全供应商 复制链接链接已复制到粘贴板!
要使 Java 虚拟机(JVM)使用 Elytron 客户端配置来提供默认的 SSLcontext,您可以使用 WildFlyElytronClientDefaultSSLContextProvider。使用此提供程序使客户端库在请求默认的 SSLContext 时自动使用 Elytron 客户端配置。
4.1. Elytron 客户端默认 SSL 上下文安全供应商 复制链接链接已复制到粘贴板!
Elytron 客户端提供了一个 Java 安全供应商 org.wildfly.security.auth.client.WildFlyElytronClientlytronClientDefaultSSLContextProvider,您可以使用它来注册 Java 虚拟机(JVM)范围的默认 SSL 上下文。
WildFlyElytronClientDefaultSSLContextProvider 提供程序的工作方式如下:
当调用
方法时,提供程序会实例化 SSLContext。SSLContext.getDefault ()SSLContext从从以下位置之一获取的身份验证上下文启动:- Elytron 客户端配置文件作为参数传递给提供程序。
文件系统中自动发现
wildfly-config.xml文件。如需更多信息,请参阅 默认配置方法。作为参数传递给提供程序的客户端配置文件具有优先权。
当调用
SSLContext.getDefault ()方法时,JVM 会返回提供程序实例化的SSLContext。由于 Elytron 客户端可以配置多个 SSL 上下文,因此规则用于为连接选择一个 SSL 上下文。默认 SSL 上下文是匹配所有规则的 SSL 上下文。提供程序返回此默认 SSL 上下文。
如果没有配置默认 SSLContext,或者没有配置,则忽略该提供程序。
当您注册 WildFlyElytronClientDefaultSSLContextProvider 提供程序时,所有使用 SSLContext.getDefault () 方法的客户端库都使用 Elytron 客户端配置,而无需在代码中使用 Elytron 客户端 API。
要注册供应商,您必须对以下工件添加运行时依赖项:
-
wildfly-elytron-client -
wildfly-client-config
您可以在客户端代码中以编程方式、或以静态方式在 java.security 文件中注册提供程序。当您要动态决定使用哪些供应商时,请使用编程注册。
以编程方式注册提供程序
您可以以编程方式在客户端代码中注册供应商,如下所示:
Security.insertProviderAt(new WildFlyElytronClientDefaultSSLContextProvider(CONFIG_FILE_PATH), 1);
Security.insertProviderAt(new WildFlyElytronClientDefaultSSLContextProvider(CONFIG_FILE_PATH), 1);
以静态方式注册供应商
您可以在 java.security 文件中注册供应商,如下所示:
security.provider.1=org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider <CONFIG_FILE_PATH>
security.provider.1=org.wildfly.security.auth.client.WildFlyElytronClientDefaultSSLContextProvider <CONFIG_FILE_PATH>
4.2. 创建加载默认 SSL 上下文的客户端示例 复制链接链接已复制到粘贴板!
以下示例演示了以编程方式注册 WildFlyElytronClientDefaultSSLContextProvider 提供程序,并使用 SSLContext.getDefault () 方法获取 Elytron 客户端初始化的 SSLContext。该示例使用静态客户端配置作为提供程序的参数提供。
4.2.1. 为 JBoss EAP 客户端创建 Maven 项目 复制链接链接已复制到粘贴板!
要为部署到 JBoss EAP 的应用创建客户端,请创建一个具有所需依赖项和目录结构的 Maven 项目。
先决条件
- 您已安装了 Maven。如需更多信息,请参阅 下载 Apache Maven。
流程
使用
mvn命令设置 Maven 项目。该命令创建项目的目录结构以及pom.xml配置文件。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 导航到应用程序根目录。
cd client-ssl-context
$ cd client-ssl-contextCopy to Clipboard Copied! Toggle word wrap Toggle overflow 将生成的
pom.xml文件的内容替换为以下文本:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 删除
src/test目录。rm -rf src/test/
$ rm -rf src/test/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
验证
在应用程序根目录中,输入以下命令:
mvn install
$ mvn installCopy to Clipboard Copied! Toggle word wrap Toggle overflow 您会看到类似如下的输出:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2.2. 创建载入默认 SSLContext的客户端 复制链接链接已复制到粘贴板!
为部署到 JBoss EAP 的应用创建一个客户端,以使用 方法加载 SSLContext。
SSLContext.getDefault ()
在此过程中,<application_home> 指向包含应用程序 pom.xml 配置文件的目录。
先决条件
通过双向 TLS,您已保护部署到 JBoss EAP 的应用。
要做到这一点,请按照以下步骤执行:
您已创建了一个 Maven 项目。
如需更多信息,请参阅为 JBoss EAP 客户端创建 Maven 项目。
- JBoss EAP 正在运行。
流程
创建一个用于存储 Java 文件的目录。
mkdir -p <application_home>/src/main/java/com/example/client
$ mkdir -p <application_home>/src/main/java/com/example/clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 前往新目录。
cd <application_home>/src/main/java/com/example/client
$ cd <application_home>/src/main/java/com/example/clientCopy to Clipboard Copied! Toggle word wrap Toggle overflow 使用以下内容创建 Java 文件
App.java:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 在 <
application_home> /src目录中创建名为 "wildfly-config-two-way-tls.xml" 的客户端配置文件。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将 holder 值替换为实际路径:
- ${path_to_client_truststore}
- ${path_to_client_keystore}
验证
- 进入 < application_home> 目录。
运行应用程序。
mvn compile exec:java
$ mvn compile exec:javaCopy to Clipboard Copied! Toggle word wrap Toggle overflow 输出示例
INFO: ELY00001: WildFly Elytron version 2.0.0.Final-redhat-00001 SSL Default SSLContext is: WildFlyElytronClientDefaultSSLContextProvider
INFO: ELY00001: WildFly Elytron version 2.0.0.Final-redhat-00001 SSL Default SSLContext is: WildFlyElytronClientDefaultSSLContextProviderCopy to Clipboard Copied! Toggle word wrap Toggle overflow
第 5 章 参考 复制链接链接已复制到粘贴板!
5.1. key-manager 属性 复制链接链接已复制到粘贴板!
您可以通过设置其属性来配置 key-manager。
| 属性 | 描述 |
|---|---|
| algorithm |
用于创建底层 |
| alias-filter | 应用到从密钥存储返回的别名的过滤器。这可以是以逗号分隔的别名列表,可以返回或以下格式之一:
|
| credential-reference |
用于解密密钥存储项目的凭据引用。这可以以明文形式指定,或作为对存储在 |
| generate-self-signed-certificate-host | 如果支持密钥存储的文件不存在,并且设置了此属性,则会为指定主机名生成一个自签名证书。不要在生产环境中设置此属性。 |
| key-store |
对用于初始化底层 |
| provider-name |
用于创建底层 |
| providers |
获取在创建底层 |
5.2. key-store 属性 复制链接链接已复制到粘贴板!
您可以通过设置其属性来配置 key-store。
| 属性 | 描述 |
|---|---|
| alias-filter | 要应用到从密钥存储返回的别名的过滤器,可以是逗号分隔的别名列表,可以返回或以下格式之一:
注意
|
| credential-reference |
用于访问密钥存储的密码。这可以以明文形式指定,或作为对存储在 |
| path | 密钥存储文件的路径。 |
| provider-name | 用于加载密钥存储的提供程序名称。设置此属性时,搜索可以创建指定类型的密钥存储的第一个供应商被禁用。 |
| providers | 对用于获取要搜索的供应商实例列表的提供程序的引用。如果没有指定,则使用全局供应商列表。 |
| relative-to |
这个存储相对于的基本路径。这可以是完整路径或预定义路径,如 |
| required |
如果设置为 |
| type |
密钥存储的类型,如 注意 以下密钥存储类型会被自动检测到:
您必须手动指定其他密钥存储类型。 有关密钥存储类型的完整列表,请参阅 Oracle JDK 文档中的 JDK 11 的 Java Cryptography Architecture Standard Algorithm Name 文档。 |
5.3. server-ssl-context 属性 复制链接链接已复制到粘贴板!
您可以通过设置其属性来配置服务器 SSL 上下文 server-ssl-context。
| 属性 | 描述 |
|---|---|
| authentication-optional |
如果为 |
| cipher-suite-filter |
用于指定启用的密码套件的过滤器。此过滤器取以冒号、逗号或空格分隔的项目列表。每个项目可以是 OpenSSL 样式的密码套件名称、标准 SSL/TLS 密码套件名称,也可以是关键字,如 |
| cipher-suite-names | 用于为 TLSv1.3 指定启用的密码套件的过滤器。 |
| final-principal-transformer | 应用于此机制域的最后一个主体转换器。 |
| key-manager |
引用 |
| maximum-session-cache-size | 要缓存的最大 SSL/TLS 会话数量。 |
| need-client-auth |
如果设置为 |
| post-realm-principal-transformer | 选择域之后要应用的主体转换器。 |
| pre-realm-principal-transformer | 在选择域之前要应用的主体转换器。 |
| protocols | 启用的协议。允许的选项有
默认为启用 警告 使用 TLSv1.2 或 TLSv1.3 而不是 SSLv2、SSLv3 和 TLSv1.0。使用 SSLv2、SSLv3 或 TLSv1.0 会导致安全风险,因此您必须明确禁用它们。
如果没有指定协议,配置 |
| provider-name |
要使用的供应商的名称。如果未指定,则来自提供程序的所有 |
| providers |
要获取用于加载 |
| realm-mapper | 用于 SSL/TLS 身份验证的域映射程序。 |
| security-domain | 在 SSL/TLS 会话建立过程中用于身份验证的安全域。 |
| session-timeout | SSL 会话的超时时间(以秒为单位)。
值
值
默认值为 |
| trust-manager |
引用在 SSLContext 中使用的 |
| use-cipher-suites-order |
如果设置为 |
| want-client-auth |
如果设置为 |
| wrap |
如果为 |
server-ssl-context 的 realm-mapper 和 principal-transformer 属性只适用于 SASL EXTERNAL 机制,其中证书由信任管理器验证。HTTP CLIENT-CERT 身份验证设置在 http-authentication-factory 中配置。
5.4. trust-manager 属性 复制链接链接已复制到粘贴板!
您可以通过设置其属性来配置信任管理器 trust-manager。
| 属性 | 描述 |
|---|---|
| algorithm |
用于创建底层 |
| alias-filter | 应用到从密钥存储返回的别名的过滤器。这可以是以逗号分隔的别名列表,可以返回或以下格式之一:
|
| certificate-revocation-list |
在信任管理器中启用证书撤销列表检查。您只能使用此属性定义单个 CRL 路径。要定义多个 CRL 路径,请使用
|
| certificate-revocation-lists |
使用多个证书撤销列表列表在信任管理器中启用证书撤销列表。
|
| key-store |
对用于初始化底层 |
| maximum-cert-path |
认证路径中可存在的最大非签发的中间证书。默认值为
此属性已从 JBoss EAP 7.3 中的 注意
在 |
| OCSP |
在信任管理器中启用在线证书状态协议(OCSP)检查。
|
| only-leaf-cert |
只检查叶证书的撤销状态。这是一个可选属性。默认值为 |
| provider-name |
用于创建底层 |
| providers |
获取创建底层 |