Я пытаюсь подключить веб-краулер, который получает доступ к определенному сайту через SSL и запрашивает мои данные на этом сайте. Аутентификация этого сайта осуществляется с помощью самоподписанного цифрового сертификата. В момент, когда я хочу зайти на сайт, я заливаю этот сертификат в формате .pfx в свой апи, конвертирую его в .pem, и при попытке зайти на сайт с этим сертификатом приходит ответ со статусом 403 (запрещено). Однако, когда я пытаюсь зайти на сайт через браузер с сертификатом в формате .pfx, я обычно его получаю. Я уже пробовал использовать Mechanize, и какое-то время это работало (пока несколько месяцев назад работало), но потом начало выдавать ошибку: SSL_connect returned = 1 errno = 0 state = SSLv3 read finished A: sslv3 alert bad certificate
Сайт старый, не часто получает обновления. После этого я уже пытался использовать net/http lib, и ошибка сохранялась, я пытался использовать гем httprb и, наконец, пробовал с Фарадеем. Все попытки заканчивались либо указанной выше ошибкой, либо статусом ответа == 403. Что мне сделать, чтобы иметь возможность подключиться? Что-то не так с моим сценарием? Отсутствует ли какая-либо информация, которая мне нужна?
Код:
# Faraday customs method:
class FaradayHttp
def with_openssl
system "openssl pkcs12 -in my-certificate-path -out certificate-output-path -nodes -password pass:certificate-password"
def cert_object
OpenSSL::X509::Certificate.new File.read("certificate-output-path")
end
# create PKey
def key_object
OpenSSL::PKey.read File.read("certificate-output-path")
end
faraday = Faraday::Connection.new 'https://example-site.com',
:ssl => {
certificate: cert_object,
private_key: key_object,
version: :SSLv3,
verify: false
}
faraday
end
end
# Controller that try to connect with the ssl server:
agent = FaradayHttp.new.with_openssl
page = agent.get '/login_path'