2011-07-21 177 views
5

私は、Seleniumを使用して、HTTP認証と今もSSL証明書を持つWebサイトをテストしています。Chromedriver in Selenium SSL証明書

HTTP基本真偽のための回避策として、私はChromeDriverを使用しています - 形式でhttp://code.google.com/p/selenium/wiki/ChromeDriverと開いたURL

https://username:[email protected] 

しかし、今のセキュリティ上の理由から、クライアント証明書は、そのアプリケーションにログインするためにPCにインストールする必要があります。

しかし、ChromeDriverは「証明書の選択」のプロンプトが表示されず、アラートとして切り替えることもできません。

誰かがこの問題を解決しましたか?

答えて

4

クライアント証明書をインストールする代わりに、--ignore-certificate-errorsコマンドラインスイッチを使用して、信頼できない証明書エラーをChromeに無視するように伝えることができます。次のようにこれを行うには

は、ChromeDriverのインスタンスを作成します。

DesiredCapabilities capabilities = DesiredCapabilities.chrome(); 
capabilities.setCapability("chrome.switches", Arrays.asList("--ignore-certificate-errors")); 
driver = new ChromeDriver(capabilities); 
+2

問題は、実際にアクセスしようとしているサイトにクライアント証明書がインストールされていることです。私たちはより多くのテスト環境を持っているので、各環境には特定の証明書が必要です。 –

+0

スタンドアロンのSeleniumサーバーを使用してコマンドラインからこれを行うにはどうすればよいですか? – B2K

+0

@PavelJanicekはこの問題を解決できました。どのような証明書をクロームドライバで選択するのか – Manvi

5

次の内容のレジストリキーを追加することにより、particual URLのために特定のクライアント証明書を使用するようにChromeブラウザを伝えることができます。

HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Google\Chrome\AutoSelectCertificateForUrls\1 = "{\"pattern\":\"https://www.example.com\",\"filter\":{\"ISSUER\":{\"CN\":\"cn of issuer\"}}}" 

追加のエントリを追加するには、同じブランチの下に追加のキーを追加します。

あなたは次の場所の下にJSON形式である設定を変更する必要があるとして、それはLinux上でもう少し複雑です:

~/.config/chromium/Default/Preferences 

上記のオプションは、マシンがActive Directoryに参加のために働くように見えますドメイン。場合には、上記の手順は、次のURLからダウンロードできます変化を導入するために事前設定されたテンプレートを使ってみても動作しません:https://www.chromium.org/administrators/policy-templates

0

私はコードの下

DesiredCapabilities cap = DesiredCapabilities.chrome(); 
ImmutableMap<String, String> commandLineArguments = ImmutableMap.<String, 
String>builder() 
    .put("web-security", "false") 
    .put("ssl-protocol", "any") 
    .put("ignore-ssl-errors", "true") 
    .put("webdriver-loglevel", "DEBUG") 
    .put("ssl-client-certificate-file", certificatePath) 
    .put("ssl-client-key-passphrase", certificatePassword) 
    .build(); 
String[] params = commandLineArguments.entrySet().stream() 
    .map(e -> String.format("--%s=%s", e.getKey(), e.getValue())) 
    .collect(Collectors.toList()) 
    .toArray(new String[0]); 
cap.setCapability(PhantomJSDriverService.PHANTOMJS_CLI_ARGS, params); 
cap.setCapability(ChromeOptions.CAPABILITY, options); 
WebDriver driver = new PhantomJSDriver(cap); 
driver.get(Url); 

でこの問題を解決しましたしかし、私は持っていました以下のコマンドを使用して自分のpfx証明書をpemに変換する

openssl pkcs12 -in client_ssl_cert.pfx -out client_ssl_cert.pem -clcerts