Jeśli wiesz, że strona, którą próbujesz uzyskać to „dobry człowiek”, można spróbować stworzyć swój „otwieracz” tak:
import httplib2
if __name__ == "__main__":
h = httplib2.Http(".cache", disable_ssl_certificate_validation=True)
resp, content = h.request("https://site/whose/certificate/is/bad/", "GET")
(ciekawe jest to disable_ssl_certificate_validation=True
)
Od docs: http://bitworking.org/projects/httplib2/doc/html/libhttplib2.html#httplib2.Http
EDIT 01:
Skoro twoje pytanie brzmiało: dlaczego tak się dzieje, możesz sprawdzić: this lub this.
EDIT 02:
Widząc jak ta odpowiedź została odwiedzona przez więcej osób niż się spodziewałem, chciałbym wyjaśnić nieco gdy wyłączenie sprawdzania poprawności certyfikatu może być przydatna.
Po pierwsze, trochę jasnego tła na temat działania tych certyfikatów. W linkach podanych powyżej jest sporo informacji, ale i tak jest.
Certyfikaty SSL muszą być zweryfikowane przez dobrze znaną (przynajmniej dobrze znaną przeglądarce) Certificate Authority. Zazwyczaj kupić cały certyfikat od jednego z tych organów (Symantec, GoDaddy ...)
Najogólniej mówiąc, chodzi o to: Te urzędy certyfikacji (CA), daje świadectwo, że zawiera również informacje w nim CA . Przeglądarki mają listę dobrze znanych urzędów certyfikacji, więc gdy przeglądarka otrzyma certyfikat, zrobi ona coś w rodzaju: "HmmmMMMmmm .... [przeglądarka przedstawia tutaj niezwykłą twarz]... Otrzymałem certyfikat i jest napisane, że został zweryfikowany przez firmę Symantec Czy znam tego gościa "Symantec"? [przeglądarka przechodzi następnie na listę znanych urzędów certyfikacji i sprawdza wersję Symantec]Oh, yeah! I do. Ok, the certyfikat jest dobry!
Można zobaczyć, że informacja się po kliknięciu na małym zamkiem przez URL w przeglądarce:

Jednakże istnieją przypadki, w których po prostu chcesz przetestować HTTPS i tworzysz własny ośrodek certyfikacji, używając kilku narzędzi command line i używasz tego "niestandardowego" ośrodka CA do podpisywania właśnie wygenerowanego "niestandardowego" certyfikatu, prawda? W takim przypadku Twoja przeglądarka (która, nawiasem mówiąc, w pytaniu to: httplib2.Http
) nie będzie miała twojego "niestandardowego" CA wśród listy zaufanych urzędów certyfikacji, więc powie, że certyfikat jest nieprawidłowy. Informacje będą nadal szyfrowane, ale to, co mówi nam przeglądarka, to to, że nie wierzy w to, że podróżuje zaszyfrowana do miejsca, do którego przypuszcza.
Na przykład, powiedzmy, że stworzyliśmy zestaw niestandardowych klawiszy i urzędów oraz wszystkich mambo-jumbo następujące this tutorial dla localhost
FQDN i że plik certyfikatu CA znajduje się w bieżącym katalogu. Można bardzo dobrze mieć serwer uruchomiony na https://localhost:4443
przy użyciu niestandardowych certyfikatów i czegokolwiek. Teraz plik certyfikatu CA znajduje się w bieżącym katalogu, w pliku ./ca.crt
(w tym samym katalogu, w którym będzie uruchomiony skrypt Pythona). Można użyć tak:
h = httplib2.Http(ca_certs='./ca.crt')
response, body = h.request('https://localhost:4443')
print(response)
print(body)
... i nie można zobaczyć ostrzeżenie więcej. Czemu? Ponieważ powiedziano iść szukać certyfikatu CA jest ./ca.crt
)
Jednakże, ponieważ Chrome (cytować przeglądarki) nie wie o certyfikacie tym CA, rozważy to nieważne:

Również certyfikaty wygasają. Istnieje szansa, że pracujesz w firmie, która używa witryny wewnętrznej z szyfrowaniem SSL. Działa dobrze przez rok, a potem twoja przeglądarka zaczyna narzekać. Idziesz do osoby, która jest odpowiedzialna za bezpieczeństwo i pytasz: "Yo !! Dostaję to ostrzeżenie tutaj! Co się dzieje?" Odpowiedź brzmi równie dobrze: "Och, chłopcze, zapomniałem odnowić certyfikat! Jest ok, po prostu zaakceptuj to od teraz, aż to naprawię". (true story, chociaż były przekleństwa w odpowiedzi otrzymałem :-D)
Jestem całkiem pewien, że weryfikacja certyfikatu SSL nie powiodło **: - D ** – BorrajaX