2017-01-18 9 views
1

У меня есть приложение, в котором я вызываю некоторые веб-службы SOAP. Когда я назвал эти службы, я получил неверную ошибку сертификата.Настройка хранилища доверия HTTPS для платформы воспроизведения 2.2.4


Чтобы решить эту проблему, я добавил сертификат безопасности для веба-службы в хранилище, расположенном на пути %JAVA_HOME%/jre/lib/security/cacerts. Теперь, когда я вызываю веб-службы из автономного приложения, я получаю данные успешно.


Но, когда я пытаюсь вызвать один и тот же веб-сервис от моего веб-приложения (построен с использованием Play рамочное 2.2.4), я получаю ту же ошибку, как ранее (то. Некорректный сертификат). После поиска решения я обнаружил, что я должен настроить платформу воспроизведения, чтобы использовать это хранилище ключей.

Я пытаюсь настроить фреймворк 2.2.4 для использования пользовательского хранилища ключей, и у меня есть некоторые сомнения. (я следовал инструкциям в следующей ссылке https configuration for play framework, но это, кажется, не ясно для меня)

  1. Где я должен определить свойства, как https.keystore, https.keystorePassword? Я имею в виду, должен ли я поместить их в файл application.conf, или я должен поместить их в переменные среды для ОС, или я должен указать их во время запуска приложения.
  2. Кроме того, я попытался указать эти свойства во время запуска приложения (например, play -Dhttps.port=9443 -Dhttps.keyStore=<Path to the keystore> -Dhttps.keyStorePassword=<Password> run), но он не работает.

Поскольку я новичок в игре в каркасе, было бы очень полезно, если бы кто-то мог поделиться шагами или небольшим учебником, чтобы сделать то же самое.

ответ

0

Обратите внимание, что существует различие между хранилищем ключей и доверительным магазином. В то время как первый имеет секретные ключи, последний содержит открытые ключи/сертификаты других сторон. То, о чем вы говорили в первом абзаце (cacerts), является доверительным магазином.

Таким образом, если вы указали https.keyStore, вы не настраиваете хранилище, которое содержит сертификаты, которые вы хотите принять от других сторон.

Используйте -Djavax.net.ssl.trustStore, чтобы настроить хранилище доверия. Другие варианты описаны здесь: https://docs.oracle.com/cd/E29587_01/PlatformServices.60x/ps_security/src/csec_ssl_jsp_start_server.html или в руководстве отладки: http://docs.oracle.com/javase/7/docs/technotes/guides/security/jsse/ReadDebug.html

+0

Благодарим Вас за исправление меня. Можете ли вы поделиться некоторой информацией о том, как настроить хранилище доверия для платформы воспроизведения 2.2.4? – greenPadawan

+0

Вы пробовали недвижимость, о которой я упоминал? – rethab

+0

Да, да. Это не сработало. – greenPadawan

0
You can start the play Netty server in https mode and to use certificates. 

In the server can achieve it using -D parameters for Netty. 

1) sbt "project pepeGrillo-server" "run -Dhttps.port=9443 -Dhttp.port=disabled -Djdk.tls.ephemeralDHKeySize=2048 
-Djdk.tls.rejectClientInitiatedRenegotiation=true 
-Dplay.server.https.keyStore.path={path-4-server-cer-for-domain}localhost.jks 
-Dplay.server.https.keyStore.password={your-password}" 

2) Затем вам нужно настроить игру Ws клиента использовать хранилище доверенных. Добавьте в application.conf следующее. Это будет гарантировать, что вводимый WS имеет настройки веб-безопасности, чтобы использовать клиентские доверяли ключи

play.ws.ssl { 
    keyManager = { 
    stores = [ 
     { type = "JKS", path = "/etc/containerHostca.jks", password = "noSe"} 
    ] 
    } 
    trustManager = { 
    stores = [ 
     { type = "JKS", path = "/etc/containerHosttrust.jks", password = "carloTA" } 
    ] 
    } 
} 

Вот как создать сертификаты

https://www.playframework.com/documentation/2.5.x/CertificateGeneration