我一直在研究WildFly 8的一些安全性主题,偶然发现了一些配置文档,这些文档没有很好地记录。 其中之一是新Web子系统Undertow的TLS / SSL配置。 有许多关于较旧的Web子系统的文档,并且确实仍然可以使用,但是这里是使用新方法进行配置的简短方法。
生成密钥库和自签名证书
第一步是生成证书。 在这种情况下,它将是一个自签名的,足以显示如何配置所有内容。 我将使用普通的Java方式,因此您所需要的只是JRE keytool。 Java Keytool是密钥和证书管理实用程序。 它允许用户管理自己的公钥/私钥对和证书。 它还允许用户缓存证书。 Java Keytool将密钥和证书存储在所谓的密钥库中。 默认情况下,Java密钥库被实现为文件。 它使用密码保护私钥。 Keytool密钥库包含私钥和完成信任链并建立主证书的可信赖性所需的任何证书。
请记住,SSL证书具有两个基本目的:分发公共密钥和验证服务器的身份,以便用户知道自己不会将信息发送到错误的服务器。 只有当服务器由受信任的第三方签名时,它才能正确验证服务器的身份。 自签名证书是由自身而非受信任的权威机构签名的证书。
切换到命令行并执行以下命令,该命令设置了一些默认值,并提示您输入更多信息。
$>keytool -genkey -alias mycert -keyalg RSA -sigalg MD5withRSA -keystore my.jks -storepass secret -keypass secret -validity 9999What is your first and last name?[Unknown]: localhost
What is the name of your organizational unit?[Unknown]: myfear
What is the name of your organization?[Unknown]: eisele.net
What is the name of your City or Locality?[Unknown]: Grasbrun
What is the name of your State or Province?[Unknown]: Bavaria
What is the two-letter country code for this unit?[Unknown]: ME
Is CN=localhost, OU=myfear, O=eisele.net, L=Grasbrun, ST=Bavaria, C=ME correct?[no]: yes
确保将所需的“主机名”放入“名字和姓氏”字段中,否则在某些浏览器中永久接受此证书作为例外时,您可能会遇到问题。 Chrome对此没有任何问题。
该命令在执行的文件夹中生成一个my.jks文件。 将此复制到您的WildFly配置目录(%JBOSS_HOME%/ standalone / config)。
配置其他WildFly安全领域
下一步是在standalone.xml的WildFly安全领域部分中,将新的密钥库配置为ssl的服务器身份(如果使用-ha或其他版本,请对其进行编辑)。
<management><security-realms>
<!-- ... --><security-realm name="UndertowRealm"><server-identities><ssl><keystore path="my.keystore" relative-to="jboss.server.config.dir" keystore-password="secret" alias="mycert" key-password="secret"/></ssl></server-identities></security-realm>
<!-- ... -->
您已准备好进行下一步。
为SSL配置Undertow子系统
如果您使用默认服务器运行,请将https-listener添加到undertow子系统:
<subsystem xmlns="urn:jboss:domain:undertow:1.2"><!-- ... --><server name="default-server"><!-- ... --><https-listener name="https" socket-binding="https" security-realm="UndertowRealm"/>
<! -- ... -->
就是这样,现在您可以连接到实例https:// localhost:8443 /的ssl端口了。 请注意,您会收到隐私错误(比较屏幕截图)。 如果需要使用完全签名的证书,则通常会从证书颁发机构获取PEM文件。 在这种情况下,您需要将其导入密钥库。 这个stackoverflow线程可能会帮助您。
翻译自: https://www.javacodegeeks.com/2015/01/ssl-with-wildfly-8-and-undertow.html