Имеет ли смысл повторять попытки возникновения ошибок SSL? - PullRequest
0 голосов
/ 28 апреля 2018

Я работаю над клиентской библиотекой для службы REST, которая общается с сервером по протоколу HTTPS. Недавно один из клиентов начал видеть следующие ошибки:

Caused by: javax.net.ssl.SSLException: Received fatal alert: handshake_failure
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:208)
    at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1666)
    at sun.security.ssl.SSLEngineImpl.fatal(SSLEngineImpl.java:1634)
    at sun.security.ssl.SSLEngineImpl.recvAlert(SSLEngineImpl.java:1800)
    at sun.security.ssl.SSLEngineImpl.readRecord(SSLEngineImpl.java:1083)
    at sun.security.ssl.SSLEngineImpl.readNetRecord(SSLEngineImpl.java:907)
    at sun.security.ssl.SSLEngineImpl.unwrap(SSLEngineImpl.java:781)
    at javax.net.ssl.SSLEngine.unwrap(SSLEngine.java:624)
    at akka.stream.impl.io.TLSActor.akka$stream$impl$io$TLSActor$$doUnwrap(TLSActor.scala:368)
    at akka.stream.impl.io.TLSActor.akka$stream$impl$io$TLSActor$$doInbound(TLSActor.scala:291)
    at akka.stream.impl.io.TLSActor$$anonfun$1.apply$mcV$sp(TLSActor.scala:226)
    at akka.stream.impl.Pump$class.pump(Transfer.scala:200)
    at akka.stream.impl.io.TLSActor.pump(TLSActor.scala:49)
    at akka.stream.impl.BatchingInputBuffer.enqueueInputElement(ActorProcessor.scala:92)
    at akka.stream.impl.BatchingInputBuffer$$anonfun$upstreamRunning$1.applyOrElse(ActorProcessor.scala:143)

Одна интересная проблема здесь заключается в том, что только 0,01% запросов не выполняются с этой ошибкой и только для одного клиента. Другие клиенты, генерирующие подобную или даже более высокую нагрузку, никогда не сталкивались с ошибками SSL.

Я думал, что ошибки рукопожатия SSL в основном связаны с сервером с сертификатом HTTPS или его инфраструктурой.

В качестве эксперимента мы добавили повторы для SSLException, аналогично тому, как у нас есть повторы для исключений, вызванных 500/503 ошибками HTTP. Используя эту версию клиента все запросы прошли. Мы можем ясно увидеть в журналах, что было одинаковое количество исключений SSLEx, но при повторных запросах было успешно.

Поиск в Интернете показывает, что некоторые http-библиотеки повторяют ошибки SSL, другие не делают.

Итак, мои вопросы:

  • Имеет ли смысл добавлять SSLException в список исключений, которые могут быть исключены из моей клиентской библиотеки?
  • Почему библиотеки http (в моем случае akka-http) не повторяют автоматически при таких исключениях, поскольку все они имеют повторные попытки для ошибок TCP?
...