Как взаимодействовать с сервисом у которого самоподписанный SSL сертификат

RNDSOFT Technology Blog
rnds
Published in
1 min readDec 18, 2020
Self signed SSL certificates

Автор: Андрей Новоселов lead developer
В нашей компании есть много внутренних сервисов, которые используются только в локальной сети.

Хочется взаимодействовать с сервисами только через защищенное соединение (https), причем во всех окружениях (дев, тест, прод). Поэтому для таких сервисов в компании существует корневой сертификат ЦА.

Если совершить http запрос к сервису который использует самоподписанный ssl, то такой запрос упадет с ошибкой, т.к. доверия к этому сертификату ноль. Запрос через ruby/rails приложение упадет с ошибкой:

OpenSSL::SSL::SSLError (SSL_connect returned=1 errno=0 state=error: certificate verify failed (unable to get local issuer certificate))

Вариант с пропуском валидации ssl даже не рассматривается:

OpenSSL::SSL::VERIFY_PEER = OpenSSL::SSL::VERIFY_NONE

Чтобы валидация проходила успешно в ruby/rails приложении, надо добавить сертификат в список доверенных для разных операционных систем:

Ubuntu

FROM ruby:2.6COPY our_root_certs/Rnd_Soft_CA.crt /usr/local/share/ca-certificates/RUN update-ca-certificates

Alpine

FROM ruby:2.6-alpineRUN apk update && apk add ca-certificatesCOPY our_root_certs/Rnd_Soft_CA.crt /usr/local/share/ca-certificates/RUN update-ca-certificates

Как проверить, что все хорошо:

irbirb(main):001:0> require 'net/http'
=> true
irb(main):002:0> Net::HTTP.get(URI.parse('https://service.internal'))
=> ""

Ошибок нет, теперь можно без проблем работать.

--

--