Autor Zpráva
Vojtan88
Profil
Dobrý den, mám problém s PHP skriptem na rozesílání SMS, který je napojený na API ProfiSMS.cz.

Vše fungovalo bez problému, ale minulý týden jsem dostal informační email, že došlo ke změně cerifikátu na doménách ProfiSMS, který se týká i jejich API:

V důsledku ukončení důvěry ve starší certifikáty vydané společností Symantec, příp. jejími dalšími obchodními značkami, dojde v pátek 13.4.2018 v 10:30 k nahrazení certifikátu domény *.profisms.cz, tedy i pro api.profisms.cz.

Od té doby se SMS přestaly z webu odesílat, resp. odesílání funguje, když protokol https://api.profisms.cz/ vyměním za protokol http://api.profisms.cz. Ale v emailu píšou, že od května přestane API na protokolu http:// fungovat. V certifikátech se vůbec nevyznám, takže nevím co mám na webu či serveru nastavit, aby odesílání zase fungovalo přes https://. Neví si s tím někdo rady?

Zde část PHP kódu s napojením na API:

$options = array(
  CURLOPT_POST => 1,
  CURLOPT_HEADER => 0,
  CURLOPT_URL => "https://api.profisms.cz/index.php?",
  CURLOPT_FRESH_CONNECT => 1,
  CURLOPT_RETURNTRANSFER => 1,
  CURLOPT_FORBID_REUSE => 1,
  CURLOPT_FOLLOWLOCATION => 1,
  CURLOPT_POSTFIELDS => $post,
);
$ch = curl_init();
curl_setopt_array($ch, $options);
$json = curl_exec($ch);
curl_close($ch);
Keeehi
Profil
Je to tím, že uložiště certifikátů které používá curl evidentně neobsahuje všechny potřebné certifikáty. Můžeš curl donutit, aby použilo jiný soubor s certifikáty pomocí
CURLOPT_CAINFO => '/cesta/k/souboru/s/certifikaty/ca_certificates.pem'

No a pak potřebuješ samotný soubor s certifikáty. Momentálně je certifikát pro doménu profisms podepsán takto:
DigiCert Global Root CA -> RapidSSL RSA CA 2018 -> *.profisms.cz. Potřebuješ tedy soubor s certifikáty DigiCert Global Root CA, RapidSSL RSA CA 2018. Ty má na svých stránkách vystavené DigiCert. V prohlížeči průzkumem certifikátu se dá zjistit, že jde o certifikáty se sériovými čísly 08:3B:E0:56:90:42:46:B1:A1:75:6A:C9:59:91:C7:4A a 08:A5:A2:46:CD:4B:5C:8C:83:D7:02:B4:BB:AB:53:49. Ty se dají použít pro rychlé nalezení správných certifikátů na stránce. Po stáhnutí je potřeba je překonvertovat do tvaru, který zvládne curl přečíst a spojit je dohromady. Což se udělá následujícím způsobem.

openssl x509 -in DigiCertGlobalRootCA.crt -inform DER -out DigiCertGlobalRootCA.pem -outform PEM
openssl x509 -in RapidSSLRSACA2018.crt -inform DER -out RapidSSLRSACA2018.pem -outform PEM
cat DigiCertGlobalRootCA.pem RapidSSLRSACA2018.pem > ca_certificates.pem

Nebo pokud mi věříš, můžeš použít soubor, který mi takovým postupem vznikl.

Problémem celého postupu je, že jakmile profisms.cz použijí jiný certifikát, což mohou udělat kdykoli a určitě to bude do 10. ledna 2019, tak pokud si pro podpis vyberou jinou certifikační autoritu, nebo DigiCert mezitím změní certifikáty, které používá k podpisu, přestane to opět fungovat a budeš si muset vytvořit nový soubor s certifikáty, podle aktuální situace. Je možné, že se to do příštího roku stane ale taky nemusí. Teoreticky to může fungovat až do 6. listopadu 2027 kdy končí platnost certifikátu RapidSSL RSA CA 2018. Pravděpodobně to však bude mnohem dříve jelikož DigiCert bude nové certifikáty podepisovat zase novějšími podpisy.

Druhým problémem je, že pokud kvůli bezpečnostnímu incidentu DigiCert revokuje své certifikáty, tvůj server se o tom nedozví a stále je bude používat. Do doby, než profisms.cz vymění svůj certifikát bude ho tvůj server ověřovat stále pomocí těchto starých. Pokud tedy během bezpečnostního incidentu unikly, může se pak kdokoli kdo je má vydávat za kohokoli, tedy i za profisms.cz. Pravděpodobnost takového scénáře je téměř nulová, ale je potřeba o tom vědět.
Vojtan88
Profil
Děkuji za rychlou odpověď,

už se v tom začínám pomalu orientovat. Zadal do kódu cestu k souboru s certifikátem a už vše funguje bez problému.

Moc díky za pomoc!!

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: