HTTPS puslapis. Dalis puslapių saugūs (secure connection), dalis nesaugūs.

Prieš porą dienų teko debug’inti puslapį su SSL (HTTPS). Problema buvo ta, kad iš keleto puslapių dalis veikė saugiu susijungimu, o dalis būdavo atvaizduota HTTPS://www.site.tld, bet rodydavo, kad susijungimas nesaugus. Gerų porą valandų ieškojau problemos šaknų, kol supratau, kad bet koks puslapyje rodomas elementas iš svetimo nesaugaus puslapio paverčia puslapį su SSL taip pat nesaugiu… Tai yra, jeigu puslapis yra saugus, sertifikatas sėkmingai patvirtintas, bet puslapyje yra nuoroda <a href=”HTTP://www.external-nonsecure-site.tld”> ar <img src=”HTTP://www.external-nonsecure-site.tld/image.jpg” , tai visas puslapis tampa nesaugiu (kaip vėliau paaiškėjo, kai kurios naršyklės rodo, kad tik dalis turinio yra nesaugus). Tuo tarpu likę puslapiai, kuriuose nėra nuorodų ar paveikslėlių su nuorodomis į nesaugius puslapius, rodomi kaip saugūs.

Išeitys yra trys (bent jau pats daugiau nesugalvoju):

  1. Parsisiųsti reikiamą turinį į savo serverį ir pateikinėti tik lokalias nuorodas.
  2. Pateikti nuorodas tik į SSL/TLS apsaugotus išorinius puslapius.
  3. Parašyti puslapiui funkciją, kuri fone (background) realiu laiku parsiųstų turinį ir atvaizduotų kaip lokalų.

 

Kitas į akis kritęs dalykas buvo nuolatis pranešimas klaidų registre (error log):

[info] [client ::1] SSL library error 1 in handshake (server example.tld:443)
[info] SSL Library Error: 336027900 error:140760FC:SSL routines:SSL23_GET_CLIENT_HELLO:unknown protocol speaking not SSL to HTTPS port!?

Šitas klaidos pranešimas išlenda dėl Apache serverio vidinų procesų valdymo ypatybių :) Vidiniai Apache susijungimai nesugeba kalbėti SSL protokolu. Atrodytų gal ir nieko blogo, bet erzina. Išeitis tokia: paskutinė “Listen” direktyva turi būti nesaugaus prievado, pavyzdžiui, 80, kad apache vidinis susijungimas visada baigtūsi prievade be SSL. Plačiau čia InternalDummyConnection

Negerai:

Listen 80
<IfModule mod_ssl.c>
Listen 443
</IfModule>

Gerai:

<IfModule mod_ssl.c>
Listen 443
</IfModule>
Listen 80