4

Behat を https で保護されたプロジェクトに持ち込もうとしていますが、curl リクエストの開始時にミンクが失敗します。

Scenario: Loggin in                              # features/debt.feature:6
    Given I am on "/"                              # FeatureContext::visit()
      [curl] 51: SSL: certificate subject name 'ubuntu' does not match target host name 'wizard' [url] https://wizard/admin/dev.php/ [info] array (
        'url' => 'https://wizard/admin/dev.php/',
        'content_type' => NULL,
        'http_code' => 0,
        'header_size' => 0,
        'request_size' => 0,
        'filetime' => -1,
        'ssl_verify_result' => 1,
        'redirect_count' => 0,
        'total_time' => 0.061943,
        'namelookup_time' => 0.000234,
        'connect_time' => 0.000344,
        'pretransfer_time' => 0,
        'size_upload' => 0,
        'size_download' => 0,
        'speed_download' => 0,
        'speed_upload' => 0,
        'download_content_length' => -1,
        'upload_content_length' => -1,
        'starttransfer_time' => 0,
        'redirect_time' => 0,
        'certinfo' => 
        array (
        ),
      ) [debug] * About to connect() to wizard port 443 (#0)
      *   Trying 127.0.0.1... * connected
      * Connected to wizard (127.0.0.1) port 443 (#0)
      * successfully set certificate verify locations:
      *   CAfile: none
        CApath: /etc/ssl/certs
      * SSL connection using DHE-RSA-AES256-SHA
      * Server certificate:
      *      subject: CN=ubuntu
      *      start date: 2011-05-23 08:26:04 GMT
      *      expire date: 2021-05-20 08:26:04 GMT
      * SSL: certificate subject name 'ubuntu' does not match target host name 'wizard'
      * Closing connection #0

この問題は、次の 2 つの curl パラメータを設定することで解決できます。

CURLOPT_SSL_VERIFYPEER = false
CURLOPT_CERTINFO = false

Mink が内部的に guzzle を使用していることは知っています。これにより、curl リクエストが開始されます。curl オプションを使用して guzzle クライアントを正しくインスタンス化するにはどうすればよいですか?

4

4 に答える 4

5

はい、それは既知の問題であり、現在のところ唯一の解決策は、behat.yml で次のようにすることです。

default:
    paths:
        features: .
        bootstrap: %behat.paths.features%/bootstrap    
    extensions:
        Behat\MinkExtension\Extension:
            base_url: http://yourhost/
            goutte:
                guzzle_parameters:
                    ssl.certificate_authority: system
                    curl.options:
                        64: false   # CURLOPT_SSL_VERIFYPEER
                        172: false  # CURLOPT_CERTINFO
于 2013-04-11T14:08:20.087 に答える
3

今のところ、behat.yml に設定する必要があるのは次のとおりです。

default:
  extensions:
    Behat\MinkExtension\Extension:
      goutte:
        guzzle_parameters:
          curl.options:
             CURLOPT_SSL_VERIFYPEER: 0
             CURLOPT_CERTINFO: 0
             CURLOPT_SSL_VERIFYHOST: 0
          ssl.certificate_authority: system

このプルリクエストhttps://github.com/guzzle/guzzle/pull/498がマージされた後、次のことができるようになります:

default:
  extensions:
    Behat\MinkExtension\Extension:
      goutte:
        guzzle_parameters:
          ssl.certificate_authority: false

読みやすいので、整数定数ではなく文字列定数を使用していることに注意してください。適切な定数/整数変換は Guzzle 内で行われるため、ここで整数を使用する必要はありません。

また、問題を解決する CURLOPT_SSL_VERIFYHOST を追加しました。

于 2013-12-13T18:50:28.497 に答える
0

Minkは、Guzzleを内部的に初期化するGoutteを使用します(https://github.com/fabpot/Goutte/blob/master/Goutte/Client.php#L45を参照)。

問題を解決するためにGuzzleを初期化する方法は次のとおりです:https ://github.com/fabpot/Goutte/issues/63#issuecomment-6371727

この問題を解決する方法は複数ありますが、私が今見ることができる最も簡単な解決策は次のとおりです。

他の(おそらくよりクリーンな)方法は、コンパイラパスを使用してサービス定義を変更し、setClient()を呼び出すようにすることです。

于 2012-07-17T09:27:29.960 に答える
0

私の解決策:

/**
 *
 * @BeforeScenario
 * @return void
 */
public function doNotCheckSsl()
{
    $strUrl = $this->getMinkParameter( 'base_url' );
    $objGuzzleClient = new GuzzleClient( $strUrl );
    $objGuzzleClient->setSslVerification( false, false, 0 );
    $objClient = new GoutteClient();
    $objDriver = new GoutteDriver( $objClient );
    $objClient->setClient( $objGuzzleClient );

    $objSession = new Session( $objDriver );
    $objSession->start();
    $this->getMink()->registerSession( 'sess', $objSession );
    $this->getMink()->setDefaultSessionName( 'sess' );
}
于 2013-10-16T10:03:41.583 に答える