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 为我正确地在 httphttps 之间重定向。

【讨论】:

以上是关于Grails-cxf 中基于 SSL 的 Web 服务?的主要内容,如果未能解决你的问题,请参考以下文章

nginx基于SSL方式代理jenkins和kibana

如何通过 SSL 实现 Web 服务到 Web 服务的通信?

如何保障服务器数据安全,教你将SSL证书安装到Apache Web服务器

Windows下基于IIS服务的SSL服务器的配置

MySQL基于SSL的主从复制

Loadrunner对https协议(单双向SSL)的web端性能测试