Showing posts with label https. Show all posts
Showing posts with label https. Show all posts

Tuesday, October 16, 2012

Ходим SOAP запросами на https

Появилась производственная необходимость делать SOAP запросы через https. 
Я-то думала, что, поменяв протокол и порт, всё заработает. Да не тут-то было...

Несмотря на то, что wsdl'ка загружалась и распознавалась джиметром "на ура", запрос возвращал ошибку unable to find valid certification path to requested target, что означало что не всё хорошо с сертификатами в королевстве Датском, то есть, Джиметровском.
Воспользовавшись прокачанным скиллом гугления, нарыла следующее.

Вкратце, выжимка следующая:
1) скармливать системе сертификаты (долго, нудно, и не всегда работает);
2) использовать не WebService(SOAP) Request, а более "современный" SOAP/XML-RPC Request.

BINGO! Всё заработало.

Потому рекомендую использовать SOAP/XML-RPC Request, которы отлично работает, как с http, так и с https.

Имя протокола параметризуем в User Defined Variables, потом подставляем его во все нужные места в SOAP/XML-RPC Request'e. Профит! :)

Thursday, July 14, 2011

Jmeter, Как же залогиниться на https, да ещё и с сертификатом? - 2

Предыдущий способ для меня не сработал, потому с помощью нашего программиста мы нашли следующую лазейку.
1. К текущей Thread Group ( о том, что это такое, и с чем его едят, я расскажу чуть позже) добавляем HTTP Cookie Manager (правый клик на имени Thread Group -> Add -> Config Element -> HTTP Cookie Manager).

2. К этой же группе добавляем Add -> Config Element -> HTTP Authorization Manager со следующими параметрами:
Base URL - https://${host}:8181/
Username - ${username}
Password - ${password}

где HOST, username, password - это переменные, заданные в User Defined Variables (об этом тоже чуть позже).

3. В ту же Thread Group добавляем Add -> Sampler-> HTTP Request, с помощью которого мы вытягиваем cookies.
В пути (path) указываем 100% работающую api'ку, у которой мы можем отобрать печеньку. (Именно за этим и нужен программист, ибо у нас просто нет списка апишек с описанием, а он-то уж точно знает, что куда и как).
Переименуем этот запрос, допустим, в Get Cookies (для того, чтобы переименовать достаточно просто написать желаемое в поле Name).

3.1. Правый клик на свежесозданном Get Cookies показывает нам контекстное меню, из которого мы выбираем Add -> Post Processor -> Regular Expressions Extractor. В нём мы записываем следующее:
Reference Name: csrfmiddlewaretoken
Regular Expression: Set-Cookie: csrftoken=(\w+);
Template: $1$
Match No. (0 for Random): 1
Default value: not found

Я подозреваю, что Reference Name и регулярное выражение могут варьироваться для каждого конкретного случая, потому помощь девелоперов тут более чем приветствуется.

4. Создаём ещё один HTTP Request  с именем, скажем, Login to apache со следующими параметрами:
Server Name or IP: ${HOST}
Path: относительный путь к логину, например, /login/ (т.е., что дописывается после имени хоста, чтобы попасть на страничку логина).

Send Parameters with the Request:
username - ${username}
password - ${password}
csrfmiddlewaretoken - ${csrfmiddlewaretoken}

Усё :) После этого у меня заработало!

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

Jmeter, Как же залогиниться на https, да ещё и с сертификатом?

Способ номер раз, предложенный Артёмом Розуменко.

В командной строке сделать следующие действия (это чтоб ССЛ был по барабану устанавливается 1 раз и на всю жизть)
Для установки сертификата синатра.гармошка.ком
C:\Program Files\Java\jdk1.6.0_19\bin>keytool -import -alias sinatra.eharmony.com -file c:\sinatra.eharmony.com -keystore C:\Progra~1\Java\jdk1.6.0_19\jre\lib\security\cacerts
где C:\Program Files\Java\jdk1.6.0_19\bin - путь к бину ЖДК, c:\sinatra.eharmony.com - путь к месту где лежит сертификат, а C:\Progra~1\Java\jdk1.6.0_19\jre\lib\security\cacerts - в каталоге ЖДК по такому пути есть этот файл он за сертификаты отвечает.
если все введено правильно, то спросит пароль в консоли, а пароль "changeit"
потом проверьте что все поставилось такой командой:
C:\Program Files\Java\jdk1.6.0_19\bin>keytool -list -keystore C:\Progra~1\Java\jdk1.6.0_19\jre\lib\security\cacerts
В большом списке должон быть и новый серт.
Потом проделать следующее, можно и без консоли
1. Add the three key jars to your JVM's "ext" (extentions) directory; e.g.
    cp jcert.jar jnet.jar jsse.jar $JAVA_HOME/jre/lib/ext/
2. After the jars are in place, you must modify the file "java.security" to allow usage of the providers found within the jars. Find the file
   find $JAVA_HOME -name "java.security" как правило оно в C:\Program Files\Java\jdk1.6.0_19\jre\lib\security
3.  Add the following line to the file java.security (in case it's not exsists):
    security.provider.2=com.sun.net.ssl.internal.ssl.Provider а такая строчка у меня была, если есть то не вставляйте.
И после конфигурации в 15-20 минут наступает непреодолимое счастье :).
Сертификат тянется с файерфокса по средствам нажатия на замочек и экспорт его потом на тачку.
Там ещё очень аккуратно надо импортить в caserts. На всякий случай нужно этот файлик забэкапить (хотя, оттуда, по необходимости, можно и удалять).

Хинт - добавляя сертификат в caserts, его имя нужно прописывать точно так же, как оно появляется в самом сертификате. Т.е., если у Вас самописный сертификат говорит, что он выпущен для vasya-pupkin, то его надо прописывать именно, как vasya-pupkin, хоть вы и ходите на сайт vasya-pupkin.com через https.
Кому нужны файлы - свистите, скину :)