Android, Chrome a problém s HTTPS

Na jednu webovú aplikáciu používam server Nginx s podporou SSL (SHA-1), aby som mohol na stránky pristupovať cez zabezpečený protokol HTTPS. Ale z nejakého dôvodu mi jedného dňa prestal fungovať certifikát na Androide s prehliadačom Chrome. Chrome zobrazoval hlášku o neplatnom certifikáte a nechcel stránku zobraziť. Čo bolo dosť čudné, lebo na notebooku a na iPade mi bežalo všetko v poriadku. Tak som začal pátrať, kde je problém.

Nakoniec som sa dočítal že šifrovanie SHA-1 už nie je bezpečné používať a je potrebné (do istého času) ho nahradiť novým algoritmom SHA-256 a vyšším. Viac informácií sa môžete dočítať napríklad na stránke FAQ - koniec podpory SHA-1 certifikátov a ich upgrade.

National Institute of Standards and Technology (NIST) neodporučil používať SHA-1 po roku 2013, takže nie je divu, že o jeho nahradení začali uvažovať aj výrobcovia software.

Takže stačilo vygenrovať nový typ certifikátu (SHA-256) a potom už bežalo všetko v poriadku aj na Android zariadeniach. Ak aj vy ešte používate starý typ certifikátu tak odporúčam čím skôr prejsť na nový typ certifikátu, lebo postupne budú aj ostatné webové prehliadače ignorovať certifikáty typu SHA-1.

V mojom prípade fungoval tento postup, niektoré kroky môžu byť odlišné v závislosti od poskytovateľa certifikátu (certifikačnej autority).

POSTUP

Prvý krok je vygenerovať nový certifikát s podporou SHA-256. Počas generovania certifikátov budete dotazovaný na otázky ohľadne nového certifikátu. Tu som vypĺňal hodnoty podľa pôvodného certifikátu.

openssl genrsa -out server.key 2048 -sha256  
openssl req -out server.csr -key server.key -new  

Ak ste generovali certifikát na vašom počítači bude potrebné certifikáty prekopírovať na server.

scp user@server.tld:/var/certifikaty server.key  

Ďalší krok je závislý od Vášho poskytovateľa certifikátu tak u Vás môže vyzerať postup trocha inak. Musel som nahrať súbor server.csr nahrať do webového formulára a zvoliť typ certifikátu SHA-256. Po odoslaní formuláru mi prišiel email, kde bol uvedený odkaz v ktorom som potvrdil žiadosť o vygenerovanie nového certifikátu. Následne mi na prišiel email a v prílohe boli vygenerované nové certifikáty. Súbory s príponou .pem a .txt (*.crt) som nakopíroval na server.

scp user@server.tld:/var/certifikaty certifikat.pem  
scp user@server.tld:/var/certifikaty certifikat.txt  

Ešte bude potrebné spojiť súbory s príponou .pem a .txt do jedného súboru.

cat certifikat.txt server.pem > server.combined  

A potom už zostáva len nakonfigurovať server Nginx aby použil nové certifikáty a je hotovo.

server {  
    ...
    ssl on;
    ssl_certificate /var/certifikaty/server.combined;
    ssl_certificate_key /var/certifikaty/server.key;
    ...
}
Show Comments