HTTPS-запись Betamax с прокси-сервером - ошибка сертификата - Java Groovy

Я не могу заставить HTTPS URL работать с betamax.

Это похоже на другую проблему, опубликованную ниже, однако я уже выполнил импорт файла betamax.pem, и, похоже, он не имел никакого эффекта:

Вот команда импорта, которую я выполнил:

c:\Users\UserAccount>"%JAVA_HOME%/bin/keytool.exe" -importcert -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -file betamax.pem -alias betamax -storepass changeit -noprompt

Вот мой конфиг:

    static final File TAPES =
    new File(System.getProperty('BETAMAX_TAPEDIR') ?:
        'src/integrationTest/resources/betamax/tapes')

    static final TapeMode TAPEMODE =
    System.getProperty('BETAMAX_MAKETAPES') ?
        TapeMode.READ_WRITE :
        TapeMode.READ_ONLY

    static final Integer PROXYPORT =
    System.getProperty('BETAMAX_PROXYPORT') ?
        System.getProperty('BETAMAX_PROXYPORT').toInteger() :
        Configuration.DEFAULT_PROXY_PORT

    @Shared
    Configuration configuration =  Configuration.builder()
            .tapeRoot(TAPES)
            .ignoreLocalhost(false)
            .defaultMode(TAPEMODE)
            .proxyPort(PROXYPORT)
            .sslEnabled(true)
            .build()

    @Rule
    RecorderRule recorder = new RecorderRule(configuration)

    @Betamax(tape='GradleNews.tape')
    def "Try record HTTPS"()
    {
      when:
      def http = new RESTClient('https://discuss.gradle.org')
      http.head path: 'c/books-articles'

      then:
      true
    }

Который производит:

javax.net.ssl.SSLException: hostname in certificate didn't match: <discuss.gradle.org> != <*.discourse.org> OR <*.discourse.org> OR <discourse.org>

Кто-нибудь может увидеть, что я делаю не так?

Вот отчет о похожей проблеме: Betamax не может записывать трафик HTTPS

1 ответ

Таким образом, ответ на этот вопрос заключается в том, что HTTPBuilder не учитывает автоматическое перенаправление на прокси, реализованное Betamax. Это задокументировано в документации по betamax.software, которую я, похоже, неправильно понял. Чтобы работать с HTTPBuilder (или его производным от RESTClient), просто установите хост / порт прокси на httpclient вручную на 127.0.0.1/5555 соответственно. При использовании HTTP-клиента, который учитывает настройку прокси-сервера JVM, он работает без проблем.

Стоит также отметить, что сообщение об ошибке вводило в заблуждение. При использовании RESTClient, это, кажется, указывает на проблему в сертификате, которая заставила меня потратить целый день, пытаясь выяснить, почему он не видит сертификат betamax в хранилище сертификатов. Однако с сертификатом проблем не возникало, он был исправлен только путем ручной настройки прокси.

Другие вопросы по тегам