J'essaye de connecter un webcrawler qui accède à un certain site via SSL et interroge mes données sur ce site. L'authentification de ce site s'effectue via un certificat numérique auto-signé. Au moment où je veux accéder au site, je télécharge ce certificat au format .pfx vers mon API, je le convertis en .pem, et quand j'essaye d'accéder au site avec ce certificat, la réponse vient avec le statut 403 (interdit). Cependant, lorsque j'essaie d'accéder au site via un navigateur avec le certificat au format .pfx, je l'obtiens généralement. J'ai déjà essayé d'utiliser Mechanize, et cela a fonctionné pendant un moment (jusqu'à il y a quelques mois cela a fonctionné), mais cela a commencé à donner l'erreur: SSL_connect returned = 1 errno = 0 state = SSLv3 read finished A: sslv3 alert bad certificate
Le site est ancien, il ne reçoit pas fréquemment les mises à jour. Après cela, j'ai déjà essayé d'utiliser le net/http lib et l'erreur persistait, j'ai essayé d'utiliser la gemme httprb et enfin j'ai essayé avec Faraday. Toutes les tentatives se sont terminées par l'erreur citée ci-dessus ou par le statut de réponse == 403. Que puis-je faire pour pouvoir me connecter? Y a-t-il un problème avec mon script? Est-ce qu'il manque des informations dont j'ai besoin?Ruby - Se connecter avec SSL et s'authentifier via le certificat client - sslv3 alerte mauvais certificat
code:
# 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'