Веб-сервис через SSL в Grails-cxf? - PullRequest
0 голосов
/ 28 сентября 2011

Мне нужно обслуживать определенный веб-сервис CXF по HTTPS (у меня есть несколько других, которые должны работать по обычному 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: '/' ]

Служба перестает отвечать на протокол http на 8080, но, по-видимому, не работает по протоколу https: 8443 - по крайней мере, соединение telnet с 8443 не удается.

Если я запускаю приложение с grails run-app -https, все приложение работает через https.

Чтобы отделить http от сервисов https, мне, вероятно, понадобится сделать следующее: " Автоматическое переключение http / httpS с Grails ", но сейчас я бы хотел, чтобы по крайней мере различные службы работали на два разных порта.

  1. Какие шаги нужно выполнить, чтобы одна служба работала по HTTPS только ?

  2. Похоже, что на войне нужно что-то еще для работы SSL, как в этом вопросе: SSL, Tomcat и Grails ?

Моя среда: Grails 1.3.5, acegi-security 0.5.3 (я знаю, что она устарела), Tomcat 6.

1 Ответ

0 голосов
/ 28 сентября 2011

Пожалуйста, исправьте меня, если я ошибаюсь.

Обе опции в SecurityConfig.groovy работают.

В автономном Tomcat нет способа программно включить SSL-коннектор, нужновключите его в глобальной конфигурации сервера (server.xml): SSL, Tomcat и Grails .

Для запуска приложения я добавил scripts/_Events.groovy с помощью eventConfigureTomcat ловушки и скопировал кусокTomcatServer.groovy в плагине Tomcat:

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 для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...