在JBoss 5上设置SSL

如何在Linux(Red Hat – Fedora 8)盒子上的JBoss 5上启用SSL?

我到目前为止所做的是:

(1)创build一个testing密钥库。

(2)将新生成的server.keystore放置在$ JBOSS_HOME / server / default / conf中

(3)在$ JBOSS_HOME / server / default / deploy / jbossweb.sar中的server.xml中进行以下更改以包含此内容:

<!-- SSL/TLS Connector configuration using the admin devl guide keystore --> <Connector protocol="HTTP/1.1" SSLEnabled="true" port="8443" address="${jboss.bind.address}" scheme="https" secure="true" clientAuth="false" keystoreFile="${jboss.server.home.dir}/conf/server.keystore" keystorePass="mypassword" sslProtocol = "TLS" /> 

(4)问题是,当JBoss启动时它会logging这个exception(在启动过程中)(但是我仍然可以查看http:// localhost:8080 /下的所有东西):

 03:59:54,780 ERROR [Http11Protocol] Error initializing endpoint 

java.io.IOException:无法在org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory)上的org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:456)处恢复密钥.java:139)在org.apache.tomcat.util.net.JIoEndpoint.init(JIoEndpoint.java:498)位于org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:175)。 catalina.connector.Connector.initialize(Connector.java:1029)at org.apache.catalina.core.StandardService.initialize(StandardService.java:683)at org.apache.catalina.core.StandardServer.initialize(StandardServer.java: 821)at org.jboss.web.tomcat.service.deployers.TomcatService.startService(TomcatService.java:313)

我知道,要完成SSL客户端validation,还有更多工作要做。

这可能不是你要找的最直接的答案,但是经过几年来build立了很多基于Tomcat的基础架构之后,我总是用Apache和mod_ssl来使用mod_jk(ajp13)连接它们。 这有许多原因是有益的:

  • 您可以将所有静态文件处理卸载到Apache以获得更好的性能
  • 你可以访问所有的mod_rewrite(和其他真棒模块)function
  • 设置SSL w / Apache是​​没有什么大不了的,Tomcat从来不知道它是一个SSL通道

…等等。 虽然Java引擎可以处理SSL,但它不是生活中的优点之一,往往比它的价值更麻烦。 让java处理webapps和他们的java代码,让Apache做它最擅长的事情。 你也会发现mod_jk有很多很好的select来确保你的应用程序引擎不会被重载; 使用正确的参数组合,当Tomcat实例的响应速度不够快(或崩溃/locking)时,您可以让用户以干净,好看的方式临时redirect。

这可能有点晚,但是如果你非常接近,似乎值得回答:

  1. 从描述中不清楚,但我认为你已经在密钥库中获得了服务器证书? 如果没有,你需要这样做 – 你可以使用OpenSSL生成一个证书,如果你还没有这样做。

  2. 您需要向server.xml添加一个新参数,以指定用于在server.keystore中查找证书的别名。 所以如果你的证书别名是'localhost',那么你需要在你的server.xml中添加keyAlias="localhost" ,所以它看起来像这样:

     <Connector protocol="HTTP/1.1" SSLEnabled="true" port="8443" address="${jboss.bind.address}" scheme="https" secure="true" clientAuth="false" keystoreFile="${jboss.server.home.dir}/conf/server.keystore" keystorePass="mypassword" sslProtocol = "TLS" keyAlias="localhost"/> 

使用您在server.xml中为证书select的任何别名replacelocalhost。

顺便说一句 – 根据你的具体要求,我倾向于同意Tactical Vim,使用mod_ssl是一个更好的select。

最后说明 – 一旦你有服务器端工作,configuration客户端authentication是相对直接的。 您需要一个新的密钥库,其中将包含可信的CA以签署客户端证书。 所以你有这些新的参数来添加truststoreFile,truststorePassword和clientAuth。 将clientAuth设置为'want'意味着您将被要求进行身份validation,但取消不会locking您,设置为true意味着如果您不提供客户端访问权限,则无法访问服务器(此时,可能要禁用明文连接器)。 另外两个参数相当于相应的密钥库参数,但要非常小心地将您放入信任库的证书作为由信任库中的证书签名的任何证书将被接受用于客户端身份validation(如果您考虑了一段时间将是有道理的)。

我有完全相同的问题。

http://forums.novell.com/novell-product-support-forums/identity-manager/im-userapp-workflow/321716-error-enabling-ssl.html

“这个问题是由于Tomcat中的一个bug造成的,如果密钥库密码和密钥密码不一样的话,这个错误会导致这个错误,这个问题在我的设置中是不一样的,修正就是用两个密码重新创build密钥库。“

现在为我工作。

就个人而言,我认为问题是当这个人在密钥库中创build了他的私钥时,他给了它一个错误的别名。 他需要给它一个“tomcat”的别名。 否则,tomcat会认为keystore是空的,不会告诉你是这样的。