Ach, ten HTTPS

Posted
Comments None

Właśnie przyszła mi do głowy kolejna warta uwiecznienia myśl, więc siadam do pisania. Coś na ten temat już raz wymyślałem i mi umknęło – dobrze byłoby, żeby nie stało się tak ponownie.

Czasem wymyśla się takie sztuczki, na przykład kiedy trzeba sobie opracować jakąś prowizorkę. Tym razem będzie to skrypt w języku Ruby. Różnych już rzeczy potrzebowałem – na przykład pracując ze starą wersją Ruby, której nie mam możliwości uaktualnić, musiałem czasem wpisywać do pliku Gemfile pożądane wersje używanych gemów, o czym może jeszcze kiedyś napiszę. No ale tym razem było na odwrót. Programik mój przetwarza dane z pewnej strony www (dokładniej: robi z linków na tej stronie kanał RSS, bo twórcy strony jeszcze nie odkryli tej technologii), co nagle przestało działać, kiedy na portalu zainstalowano certyfikat SSL i uruchomiono przekierowanie na HTTPS.

Opis problemu łatwo znaleźć – wystarczy spytać Google o “Ruby open-uri redirect forbidden”. Gem open-uri jest poprawiony dopiero w Ruby 2.4, a ja mam 2.2. I co? I kiedy nie można wybiec w przyszłość, trzeba zdobyć łatę – gem open_uri_redirections (bo to funkcja w gemie open-uri miała problem). Wykonujemy zatem w konsoli polecenie

gem install open_uri_redirections

a w programie dopisujemy linię

require 'open_uri_redirections'

Teraz możemy już poprawić niedziałające (właśnie o HTTPS się “wywalały”) wywołania funkcji open(), czyli zamiast np.

doc = Nokogiri::HTML(open(url)) 

piszemy

doc = Nokogiri::HTML(open(url, :allow_redirections => :all))  

i próbujemy ponownie. I co? I kolejny błąd:

D:/MagicalMe/Ruby200/lib/ruby/2.2.0/net/http.rb:923:in `connect': SSL_connect returned=1 errno=0 state=SSLv3 read server certificate B: certificate verify failed (OpenSSL::SSL::SSLError)

Co teraz? Należy dokończyć konfigurację, czyli pobrać potrzebne certyfikaty i pokazać je programom. Ściągamy sobie zatem plik cacert.pem (przysiągłbym, że już kiedyś ten plik ściągałem i do czegoś wykorzystywałem, co jednak nie zaowocowało notatką), a miejsce, gdzie go nagraliśmy, wstawiamy do zmiennej środowiskowej. Może lepiej nie prostym poleceniem

set SSL_CERT_FILE=c:\MagicalMe\Downloads\cacert.pem

wpisanym w konsoli, tylko w jakiś bardziej trwały sposób. Jeszcze tylko przejrzeć poprawiany skrypt, bo może gdzieś w nim są adresy HTTP, które warto od razu zmienić na HTTPS, no i… działa! A już myślałem, żeby wykombinować mały serwerek z Ruby 2.4 specjalnie dla mojego prowizorycznego skryptu…

Author
Categories Komputery i Internet

Comments

Commenting is closed for this article.

← Older Newer →