Zasadniczo mam to:Pozwól samopodpisanym certyfikatami HTTPS wrapper
function request($url) {
return file_get_contents($url, false, stream_context_create(array(
"ssl" => array(
"verify_peer" => true,
"allow_self_signed" => false,
)
)));
}
request("https://[A]");
request("https://[B]");
gdzie [A] jest jakiś adres na serwerze z „prawdziwym” świadectwa i [B] jest czymś, na jednym z tylko samopodpisany certyfikat.
[A] to działa dobrze, z [B] i uzyskać w ten sposób:
file_get_contents(): Failed to enable crypto
który jest dość niefortunny komunikat o błędzie, który powinien być czymś w rodzaju „Weryfikacja certyfikatu serwera nie powiodło się”, ale w porządku. ..
teraz pomyślałem: "OK, [B] jest mój system testu - nie dbam o świadectwo" i zmienił kontekst do tego:
"verify_peer" => false,
"allow_self_signed" => true,
to should teraz zaakceptować ny certyfikat serwera, nawet mój własny podpis. Ale nadal zachowuje się tak samo - [A] działa, [B] nie. Czemu?
Btw: Wiem, że działa dobrze z przedłużeniem curl, ale chcę go pokonać bez niego.
Proszę zdefiniować * "Z [A] to działa dobrze" * ... ponieważ żaden z nich nigdy nie powinien działać. Nie określiłeś '' cafile "' lub '" capath "' aby powiedzieć PHP jakie certyfikaty CA użyć do weryfikacji przez osoby sprawdzające i nie zezwalałeś na autopodpisywane certyfikaty [A] ani [B] nie mogą się połączyć, jeśli rzeczywiście używasz dokładnego kodu pokazanego tutaj. – rdlowrey