Проиграть авто-тест с проблемами хранилища ключей SSL Java - PullRequest
4 голосов
/ 01 февраля 2012

Я пытаюсь настроить Jenkins CI с помощью плагина Play, который использует авто-тестирование воспроизведения для запуска приложения.

Проблема в том, что у меня также есть SSL в качестве требования, но в браузере firephoque java нет нужного ключа / сертификата для использования.

Изначально я создал пару ключ / сертификат с OpenSSL, но теперь нужно выяснить, как импортировать эти ключи в глобальное хранилище ключей Java по умолчанию (предположительно в $ HOME / .keystore).

Я пробовал эти ресурсы в разном порядке, но безрезультатно:

Исходная нить группы воспроизведения Google, с которой я начал: http://bit.ly/yZBezu

http://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-using-java-keytool.html

http://www.agentbob.info/agentbob/79-AB.html

http://docs.oracle.com/javase/1.3/docs/tooldocs/win32/keytool.html

Я могу запустить приложение по протоколу SSL, когда бегунок воспроизведения выбирает местоположение хранилища ключей из записи в application.conf, но когда при автоматическом тестировании запускается браузер firephoque, я получаю:

The application does not start. There are errors: 
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: 
    PKIX path building failed:
    sun.security.provider.certpath.SunCertPathBuilderException:
        unable to find valid certification path to requested target

Хотелось бы, чтобы меня указывали в направлении краткого способа сделать это, мой мозг полон видений DER и PEM и забавы с keytool прямо сейчас, я не могу думать прямо.

Конечной целью является самозаверяющий сертификат, который будет проверяться в соответствии с play auto-test, а также любыми другими способами запуска приложения.

Мой файл application.conf содержал различные комбинации следующих элементов:

# SSL - localhost default
# original way worked fine before auto-test came into play (so to speak :))
# certificate.key.file=conf/play_host.key
# certificate.file=conf/play_host.crt

# Keystore 
ssl.KeyManagerFactory.algorithm=SunX509
trustmanager.algorithm=JKS
keystore.password=passw0rd
keystore.file=conf/keystore.jks 
https.port=9443

UPDATE Вывод conf / keystore.jks:

# keytool -list -keystore keystore.jks
Enter keystore password:  

Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

localhost, Jan 31, 2012, PrivateKeyEntry, 
Certificate fingerprint (MD5): 36:EF:63:4E:53:23:18:22:13:8C:2C:DB:F1:72:2C:93

Но этот файл не доступен через браузер, который запускается внутри автотеста, это firephoque, который является java-приложением, которое просматривает хранилище ключей по умолчанию - сделал еще несколько копаний и начал искать в

/Library/Java/Home/lib/security/

который ссылается на

/System/Library/Java/Support/CoreDeploy.bundle/Contents/Home/lib/security

чтобы найти место, где любое приложение сможет найти хранилище ключей. Но я все равно получаю тот же результат, если поместить другое хранилище ключей в папку security выше.

ОБНОВЛЕНИЕ 2: также пытался

play auto-test -Xmx1g -Djavax.net.ssl.trustStore=/path/to/keystore.jks

но я не уверен, что делаю все правильно. Как я могу получить запуск автотеста для поиска хранилища ключей в явном месте?

Ответы [ 2 ]

2 голосов
/ 01 февраля 2012

Не элегантно, но с игрой 1.2.5 на горизонте нет ничего страшного в том, чтобы патч 1.2.4 заработал.

https://github.com/playframework/play/commit/52f3c165cba1ea62e91a6c26ed62979b90da99c

Благодаря dertoni.

1 голос
/ 01 февраля 2012

Предполагая, что вы выполнили шаги по следующей ссылке, ваше хранилище ключей должно иметь правильную информацию.

http://www.sslshopper.com/article-how-to-create-a-self-signed-certificate-using-java-keytool.html

Знаете ли вы, если ваше приложение собирает хранилище ключей?
Можете ли вы указать полный путь к расположению файла хранилища ключей (т.е. keystore.file = / home / some_user / conf / keystore.jks)?
Кроме того, вы можете отправить вывод хранилища ключей?

...