2016-01-11 4 views
0

Я использую OpenUri для чтения файла JSON с сервера HTTPS. Он работает нормально пару дней назад, но сегодня утром я получил:OpenUri и OpenSSL не могут получить сертификат локального эмитента

OpenSSL::SSL::SSLError: SSL_connect returned=1 errno=0 state=error: certificate verify failed 
The server presented a certificate that could not be verified: 
error code 20: unable to get local issuer certificate 

Я думаю, что сервер просто обновил свой сертификат SSL, поэтому я интересно, если это это связано? В противном случае моя система потеряла корневые сертификаты?

Я запускаю Mac OS 10.11.2, Ruby 2.3.0 и OpenSSL 1.0.2e, установленный с Homebrew, и я использую RVM.

+0

Если сервер изменился, либо он либо не имеет требуемого нового корневого ЦС, либо сервер не смог обслужить полную цепочку сертификатов. Возможно также, что у вас есть новый OpenSSL, но этот рубин связан с старым с Mac (т. Е. 0.9.8). Слишком мало деталей, чтобы помочь вам здесь больше, но если сервер является общедоступным, вы можете добавить URL-адрес к своему вопросу, чтобы можно было посмотреть. –

+0

Спасибо @SteffenUllrich Мне уже пришлось перестроить рубин, чтобы связать его с новым OpenSLL. Сервер - это kimonolabs.com, если вы хотите изучить его больше. –

ответ

1

Сервера kimonolabs.com

Сервер не отправил промежуточные сертификаты, которые необходимы для построенной цепочки доверия. Таким образом, проверка не выполняется. Браузеры в этих случаях часто используют кэшированные промежуточные сертификаты от более раннего подключения к другим сайтам или пытаются загрузить отсутствующие сертификаты из Интернета. Но другие клиенты этого не делают, и поэтому проверка не выполняется.

Смотрите также the report from SSLLabs:

Цепочка сертификатов этого сервера является неполным. Класс закрыт до B.

Таким образом, проблема должна быть устранена на стороне сервера.

+0

Спасибо, не понял, что сломает. Надеюсь, они скоро раскроются. –

Смежные вопросы