Grails-cxf 中基于 SSL 的 Web 服务?
Posted
技术标签:
【中文标题】Grails-cxf 中基于 SSL 的 Web 服务?【英文标题】:Web service over SSL in Grails-cxf? 【发布时间】:2011-11-27 00:29:53 【问题描述】:我需要通过 HTTPS 提供特定的 CXF Web 服务(我还有其他几个需要通过普通 HTTP 工作的服务)。在SecurityConfig.groovy
,我设置:
httpsPort = 8443
两个都试了
secureChannelDefinitionSource = '''
CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
PATTERN_TYPE_APACHE_ANT
/services/doodah/**=REQUIRES_SECURE_CHANNEL
/**=REQUIRES_INSECURE_CHANNEL
'''
和
channelConfig = [ secure: ['/services/productid/**'], insecure: '/' ]
该服务在 8080 处停止响应 http 协议,但似乎不在 https:8443 上 - 至少,到 8443 的 telnet 连接失败。
如果我使用grails run-app -https
运行应用程序,则所有应用程序都通过 https 运行。
要将 http 与 https 服务分开,我可能需要这样做:“Automatic http/httpS switching with Grails”,但现在我至少希望在两个不同的端口上运行不同的服务。
我应该按照哪些步骤让一项服务仅通过 HTTPS 运行?
看起来 SSL 还需要在战争中发挥作用,例如这个问题:SSL, Tomcat and Grails?
我的环境是:Grails 1.3.5、acegi-security 0.5.3(我知道它已经过时了)、Tomcat 6。
【问题讨论】:
嗯,也许它根本不适用于grails run-app
。在tomcat
插件中的TomcatServer.groovy
中可以看到HTTP 和HTTPS 启动模式是互斥的。但是,如果我将 SSL 连接器添加到 server.xml
,那么如果部署到成熟的 Tomcat,它的工作方式可能会有所不同。
【参考方案1】:
如果我错了,请纠正我。
SecurityConfig.groovy
中的两个选项都有效。
在独立的 Tomcat 中,无法以编程方式启用 SSL 连接器,必须在全局服务器配置中启用它 (server.xml
):SSL, Tomcat and Grails。
对于运行应用程序,我添加了带有eventConfigureTomcat
钩子的scripts/_Events.groovy
,并在Tomcat 插件中复制了一段TomcatServer.groovy:
eventConfigureTomcat = Tomcat tomcat ->
keystore = "./some-keystore"
keystoreFile = new File(keystore)
keyPassword = "123456"
System.setProperty('org.mortbay.xml.XmlParser.NotValidating', 'true')
if (!(keystoreFile.exists()))
createSSLCertificate(keystore, keyPassword, keystoreFile)
def httpsPort = 8443 // TODO: Take from SecurityConfig.groovy
Connector sslConnector = loadInstance(
tomcat, 'org.apache.catalina.connector.Connector')
sslConnector.scheme = "https"
sslConnector.secure = true
sslConnector.port = httpsPort
sslConnector.setProperty("SSLEnabled", "true")
sslConnector.setAttribute("keystore", keystore)
sslConnector.setAttribute("keystorePass", keyPassword)
sslConnector.URIEncoding = 'UTF-8'
tomcat.service.addConnector sslConnector
我不必做协议切换技巧,Grails 为我正确地在 http
和 https
之间重定向。
【讨论】:
以上是关于Grails-cxf 中基于 SSL 的 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 SSL 实现 Web 服务到 Web 服务的通信?