Перейти к содержимому

Фотография

Selenium TrustAllSertificatsUnivaercaly


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 17

#1 hachapuri

hachapuri

    Новый участник

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 16 июля 2009 - 09:43

У меня проблема: Хочу сделать так чтобы сертификат принимался автоматом НА ВСЕХЪ браузерах, нашел такой код но не знаю как его применить, есть может у кого-то идеи?

import java.net.MalformedURLException;
import java.net.URL;
import java.util.*;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import junit.framework.Assert;

public class sign_up extends SeleneseTestCase {


TrustManager[] trustAllCerts = new TrustManager[]{
new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {return null;}
public void checkClientTrusted(
java.security.cert.X509Certificate[] certs, String authType) {}
public void checkServerTrusted(
java.security.cert.X509Certificate[] certs, String authType) {}}};

public void setUp() throws Exception {


// Install the all-trusting trust manager
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (Exception e) {
}

// Now you can access an https URL without having the certificate in the truststore
try {

URL url = new URL("https:Site_url.com");

} catch (MalformedURLException e) {
}
  • 0

#2 hachapuri

hachapuri

    Новый участник

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 16 июля 2009 - 09:47

И еще есть такой код, но к сожалению тоже не пойму что с ним делать
import java.security.GeneralSecurityException;

import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.mortbay.jetty.servlet.Default;

import com.thoughtworks.selenium.DefaultSelenium;
import com.thoughtworks.selenium.Selenium;

import java.lang.Exception;

public class TrustEverythingSSLTrustManager implements X509TrustManager {


public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}

public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
//No need to implement.
}

public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
//No need to implement.
}

private static SSLSocketFactory socketFactory = null;

/**
* Returns an SSLSocketFactory that will trust all SSL certificates; this is suitable for passing to
* HttpsURLConnection, either to its instance method setSSLSocketFactory, or to its static method
* setDefaultSSLSocketFactory.
* @see HttpsURLConnection#setSSLSocketFactory(SSLSocketFactory)
* @see HttpsURLConnection#setDefaultSSLSocketFactory(SSLSocketFactory)
* @return SSLSocketFactory suitable for passing to HttpsUrlConnection
*/
public synchronized static SSLSocketFactory getTrustingSSLSocketFactory() {
if (socketFactory != null) return socketFactory;
TrustManager[] trustManagers = new TrustManager[] { new TrustEverythingSSLTrustManager() };
SSLContext sc;
try {
sc = SSLContext.getInstance("SSL");
sc.init(null, trustManagers, null);
} catch (GeneralSecurityException e) {
throw new RuntimeException("This is a BUG in Selenium; please report it", e);
}
socketFactory = sc.getSocketFactory();
return socketFactory;
}

/** Automatically trusts all SSL certificates in the current process; this is dangerous. You should
* probably prefer to configure individual HttpsURLConnections with trustAllSSLCertificates
* @see #trustAllSSLCertificates(HttpsURLConnection)
*/
public static void trustAllSSLCertificatesUniversally() {
getTrustingSSLSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(socketFactory);
}

/** Configures a single HttpsURLConnection to trust all SSL certificates.
*
* @param connection an HttpsURLConnection which will be configured to trust all certs
*/
public static void trustAllSSLCertificates(HttpsURLConnection connection) {
getTrustingSSLSocketFactory();
connection.setSSLSocketFactory(socketFactory);
}
}
  • 0

#3 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 16 июля 2009 - 09:47

Браузером в данном случае будет сама Java, думаю, что это не совсем то, что тебе нужно. Для каждого браузера надо делать свои извороты, для FF плагином, для IE импортом и т.д. Универсального метода для Selenium я пока не видел.
  • 0

#4 hachapuri

hachapuri

    Новый участник

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 16 июля 2009 - 09:52

Да это я знаю. Но это вроде как универсальный метод, но там откуда я его скачал небыло объяснений как его запустить с селениумом
  • 0

#5 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 16 июля 2009 - 10:06

Потому, что его никак нельзя использовать с Selenium'ом. Этот код относится к прямым запросам из Java.
  • 0

#6 hachapuri

hachapuri

    Новый участник

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 16 июля 2009 - 10:13

В логах селениума можно видть что он использует HTTPUrlConnection получается все что нужно это заставить его использовать connection из этой функции. Видел еще статеек с такой же идеей , но кода там больше и мне ( как не очень умелому программисту) вообще нечего не понятно
  • 0

#7 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 16 июля 2009 - 10:21

Конечно он использует HttpURLConnection, но для чего? :) Вот именно, для того чтобы общаться с RC, а не для того, чтобы сайты грузить. Тестируемые сервисы грузятся самими браузерами и HttpURLConnection здесь никаким боком.
  • 0

#8 hachapuri

hachapuri

    Новый участник

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 16 июля 2009 - 10:34

Не буду спорить потому что не очень силен в java. Но всеравно я думаю что это так или иначе возможно потому что такая информация ни на одном блоге
  • 0

#9 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 16 июля 2009 - 10:44

Данный способ может быть полезен только в mock-режиме работы Selenium RC, т.е. тогда когда не используется браузер, а используется внутренний движок. Во всех остальных случаях это даже теоретически невозможно, чтобы понять это, достаточно просто посмотреть на архитектуру Selenium RC и Java здесь как бы и не при чём.
  • 0

#10 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 16 июля 2009 - 10:50

Не буду спорить потому что не очень силен в java. Но всеравно я думаю что это так или иначе возможно потому что такая информация ни на одном блоге

Можно ссылочки на эти блоги увидеть?
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#11 hachapuri

hachapuri

    Новый участник

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 16 июля 2009 - 11:01

http://svn.openqa.or...eleni...117&u
Вот еще один например

и еще
http://www.koders.co...spx?s=MatchRule
  • 0

#12 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 16 июля 2009 - 11:09

http://svn.openqa.or...eleni...117&u
Вот еще один например

и еще
http://www.koders.co...spx?s=MatchRule

Это куски кода SeleniumProxy. Да, можно заставить браузеры ходить через прокси, и настроить прокси так, чтобы это он принимал сертификаты, а не браузер.
Возможно, это будет кроссбраузерным решением, кстати.
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#13 hachapuri

hachapuri

    Новый участник

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 16 июля 2009 - 11:11

А можно пожалуйста поподробнее о seleniumProxy? Что это такое и где его можно изменить?:)
  • 0

#14 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 16 июля 2009 - 11:23

Это куски кода SeleniumProxy. Да, можно заставить браузеры ходить через прокси, и настроить проски так, чтобы это он принимал сертификаты, а не браузер.
Возможно, это будет кроссбраузерным решением, кстати.


По идее это только для того, чтобы сам прокси мог принять любой сертификат, этот же сертификат придётся принимать и браузеру. С другой стороны RC может подменять этот сертификат, что, насколько знаю, работает не всегда. В таком случае придётся импортировать Selenium'ный CA во все браузеры, после чего пустить всё через Selenium Proxy, возможно, что заработает.
  • 0

#15 barancev

barancev

    Администратор

  • Admin
  • PipPipPipPipPipPip
  • 6 872 сообщений
  • ФИО:Алексей Баранцев
  • Город:Россия, Москва


Отправлено 16 июля 2009 - 11:24

В документации про Selenium Server посмотрите раздел Proxy Injection: http://seleniumhq.or...he-server-works
Чтобы прокси принимал все сертификаты без вопросов, нужно сервер запускать с опцией -trustAllSSLCertificates
  • 0
Алексей Баранцев
Тренинги для тестировщиков (тестирование производительности, защищенности, тест-дизайн, автоматизация):
Линейка тренингов по Selenium

#16 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 16 июля 2009 - 11:27

Вот по поводу подмены сертификата:

SSL certificate warnings: Selenium RC automatically attempts to spoof SSL certificates when it is enabled as a proxy. If your browser is configured correctly, you should never see SSL certificate warnings, but you may need to configure your browser to trust our dangerous “CyberVillains” SSL certificate authority.


  • 0

#17 vitorg

vitorg

    Опытный участник

  • Members
  • PipPipPipPip
  • 408 сообщений

Отправлено 16 июля 2009 - 11:39

В документации про Selenium Server посмотрите раздел Proxy Injection: http://seleniumhq.or...he-server-works
Чтобы прокси принимал все сертификаты без вопросов, нужно сервер запускать с опцией -trustAllSSLCertificates

Да, это должно помочь с сертификатами, но последний раз когда я пробовал Proxy Injection Mode (пол года назад), этот режим всё ещё был крайне нестабилен. Сейчас разработчики RC пытаются полностью автоматизировать подмену сертификатов в обычном режиме RC, но вроде как всё ещё есть проблемы.
  • 0

#18 hachapuri

hachapuri

    Новый участник

  • Members
  • Pip
  • 40 сообщений
  • ФИО:Сиробаба Александр Эдуардович

Отправлено 16 июля 2009 - 11:57

всеравно ничего не выходит... :( Я так понеимаю переменную, полученную врезультате выполнения скриптов приведенных выше нужно подставить в setcustomproxyhandler()), но уних разные типы. Или я в чем-то гоню?:)
  • 0


Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных