FAQ

FAQ

Časté otázky k informacím na Nezabezpečeno.cz.

Základní informace k problematice Chrome 70 a vyřazení důvěryhodnosti Symantec certifikátů.

Jak zjistím, že je na stránkách "postižený" SSL certifikát

Zjistit, zda jsou stránky zabezpečené certifikátem, který bude nedůvěryhodný, je v prohlížeči Chrome velice jednoduché. Stačí na stránkách zmáčknout klávesu F12, případně CTRL+SHIFT+I, která otevře Vývojářskou konzoli („Console“), ve které bude zvýrazněná textová informace o ukončení podpory (informace jsou dostupné i v prohlížeči FireFox).
The SSL certificate used to load resources from https://www.domenaxyz.cz will be distrusted very soon. Once distrusted, users will be prevented from loading these resources. See https://g.co/chrome/symantecpkicerts for more information.
Odkaz vede na Google Security Blog, kde jsou uvedeny podrobnější informace k ukončení podpory důvěrnosti certifikátů Symantec.

Proč budou stránky nedůvěryhodné

Společnost Google, která vytváří internetový prohlížeč Chrome, se rozhodla k tomuto kroku po zjištění, že bylo vystaveno neoprávněně několik tisíc SSL certifikátů. Jelikož problémy nebyly Symantecem dostatečně řešeny a bylo dále nalezeno dalších 30.000 neoprávněně vydaných certifikátů, došlo v roce 2017 k rozhodnutí o vyřazení důvěryhodnosti, což je základní stavební kámen pro bezpečnou HTTPS komunikaci na internetu. Nutno podotknout, že rozhodnutí není pouze jednostranné, ale do procesu se zapojila i Mozilla a také Opera. Více informací například na Přehledné časové ose Google x Symantec.
Finálně situace dopadla tak, že Symantec celou divizi PKI (Public Key Infrastructure) odprodal společnosti DigiCert a ta od prosince 2017 vystavuje SSL certifikáty Symantec, Thawte, GeoTrust a RapidSSL. Tyto SSL certifikáty jsou již důvěryhodné a v pořádku.

Co dělat v případě že mám nedůvěryhodný SSL certifikát?

SSL certifikáty, které se stanou nebo již jsou nedůvěryhodné je nutné vyměnit. Majitel takového certifikátu má několik možnosti jak situaci vyřešit. Nejlepším způsobem je provést tzv. Reissue a nainstalovat nový certifikát. Obnova (Reissue) je zdarma, ale je nutné provést opět kompletně nové ověření. U EV a OV certifikátů to může trvat několik dnů!
Pokud certifikát expiruje v roce 2018 (za následujících 90 dnů), je lepší koupit nový SSL certifikát jako prodloužení stávajícího a nechat si připočíst nevyužité období starého k novému. Prodloužení SSL certifikátu doporučujeme provést na projektu SSLmentor, kde získáte výhodné ceny a kvalitní podporu.
Poslední možností je nákup nového, jiného SSL certifikátu, například od certifikační autority Comodo.

Certifikát je již nedůvěryhodný

Jako "krizové" řešení situace je možnost instalace SSL certifikátu ZDARMA - Comodo Free, který lze získat během minut a nasadit na webové stránky do hodiny. Poté si můžete dořešit stávající - nedůvěryhodný.
Druhou alternativou je nasazení SSL certifikátu Let's Encrypt. A to v případě, že jej nabízí poskytovatel webhostingu.
Poslední variantou je vrátit nastavení na nezabezpečenou HTTP komunikaci ...

Jak probíhalo testování domén

Testování zóny .CZ i .SK probíhalo v létě 2018. Následně byly testovány pouze SSL certifikáty vydané autoritami Symantec. Vzhledem k množství testovaných domén (.cz zóna 1.200.000, .sk zóna 380.000) nemusí seznam obsahovat všechny postižené domény. Některé domény v době testu vykazovaly chyby.
Domény .sk lze stáhnout na stránkách registru sk-nic.sk, zónu .cz bohužel sdružení CZ.NIC nedává k dispozici, bylo tedy čerpáno ze zdroje github.com/spaze/domains.
V seznamu domén nejsou také domény 3. a vyššího řádu (nazev3radu.domenaxyz.cz), které nelze jednoduše zjistit.

PY script

K dispozici dáváme i ukázku PY scriptu, který může každý použít k testování. Pouze zkušené programátory upozorňujeme, že provozovatel webu není profesionální programátor :)

import ssl
import socket
from datetime import datetime
# import requests
from urllib.request import Request, urlopen
from urllib.error import URLError, HTTPError

socket.setdefaulttimeout(5)
count = 0
overall = 0
firstrow = "No;TestDN;CN;BrandCA;CA;Exp;SAN"
file_in = ""
domains = []

try:
    if not file_in:
        file_in = input("Zadej název souboru s TLD (.txt): ")
        file_in += ".txt"

    # read data to list
    file = open(file_in, "r")
    for line in file:
        domains.append(line)
    
    # file_out = input("Zadej soubor pro export: ")
    file_out = file_in + ".csv"
    text = ""
except Exception as ex:
    print(ex)


def check(hostname):
    global text
    req = Request("https://" + hostname)
    try:
        response = urlopen(req)
    except Exception as ex:
        text = "0;" + hostname + ";" + str(ex) + ";"
        return False
    else:
        return True


def formatdate(date):
    date = datetime.strptime(date, '%b %d %H:%M:%S %Y %Z')
    return str(date)

	
try:
    firstrow += "\n"
    file_write = open(file_out, "a")
    file_write.write(firstrow)
    file_write.close()
except Exception as ex:
    print(ex)
	
	
for line in domains:
    try:
        overall += 1
        hostname = line.replace("\n", "")
        if check(hostname):
            count += 1
            ctx = ssl.create_default_context()
            s = ctx.wrap_socket(socket.socket(), server_hostname=hostname)
            s.connect((hostname, 443))
            certificate = s.getpeercert()

            # parsing dictionary certificate
            cert_cn = dict(x[0] for x in certificate['subject'])
            cert_ca = dict(x[0] for x in certificate['issuer'])
            cert_san = certificate['subjectAltName']
            sans = ''
            for val in cert_san:
                sans += val[1] + ', '

            # get certificate data
            cert = [overall]
            cert.append(hostname)
            cert.append(cert_cn['commonName']) # issued_to
            cert.append(cert_ca['commonName']) # issued_by
            cert.append(cert_ca['organizationName']) # issued_ca
            cert.append(formatdate(certificate['notAfter']))
            cert.append(sans[:-2]) # odříznutí ',_'
            text = ';'.join(map(str, cert))

        print(text)
        text += "\n"
        file_write = open(file_out, "a")
        file_write.write(text)
        file_write.close()

    except Exception as e:
        print(e)

file.close()


# {'subject': ((('commonName', 'sslmentor.cz'),),),
# 'issuer': ((('countryName', 'US'),), (('organizationName', "Let's Encrypt"),), (('commonName', "Let's Encrypt Authority X3"),)),
# 'version': 3,
# 'serialNumber': '03EBC0289D7358BD551DE4DFFB9611E193CD',
# 'notBefore': 'Jul 29 11:58:52 2018 GMT',
# 'notAfter': 'Oct 27 11:58:52 2018 GMT',
# 'subjectAltName': (('DNS', 'admin.sslmentor.cz'), ('DNS', 'blog.sslmentor.cz'), ('DNS', 'dev.sslmentor.cz'), ('DNS',
# 'sslmentor.com'), ('DNS', 'sslmentor.cz'), ('DNS', 'sslmentor.eu'), ('DNS', 'sslmentor.sk'), ('DNS', 'www.sslmentor.com'), ('DNS',
# 'www.sslmentor.cz'), ('DNS', 'www.sslmentor.eu'), ('DNS', 'www.sslmentor.sk')),
# 'OCSP': ('http://ocsp.int-x3.letsencrypt.org',),
# 'caIssuers': ('http://cert.int-x3.letsencrypt.org/',)}