Kort svar

Signaturalgoritmen er den måde CA'en bekræfter certifikatets ægthed på: en kryptografisk hash af certifikatets indhold, signeret med CA'ens private nøgle. SHA-1 er brudt — forskere har fremstillet reelle kollisioner — og browsere afviste SHA-1-certifikater allerede i 2017. I dag skal alle offentlige certifikater signeres med SHA-256 (eller stærkere). Tjek dine med openssl x509 -text og kig efter sha256WithRSAEncryption eller ecdsa-with-SHA256.

Hvad signaturalgoritmen faktisk gør

Et certifikat består af data (domænenavne, offentlig nøgle, gyldighedsperiode) plus en signatur. CA'en beregner en hash af dataene og krypterer den med sin private nøgle. Enhver klient kan genberegne hashen og verificere signaturen med CA'ens offentlige nøgle. Hvis nogen ændrer bare ét tegn i certifikatet, ændres hashen, og signaturen passer ikke længere. Hele sikkerheden hviler derfor på at man ikke kan finde to forskellige inputs med samme hash — en kollision.

Hvorfor SHA-1 døde

SHA-1 producerer en 160-bit hash. Teoretiske svagheder blev fundet allerede i 2005, og i 2017 demonstrerede en praktisk kollision ("SHAttered") at man kunne fremstille to forskellige dokumenter med samme SHA-1-hash. For certifikater betyder en kollision at en angriber i princippet kan få et legitimt certifikat signeret og genbruge signaturen på et forfalsket. Browserne fjernede derfor tillid til SHA-1-certifikater fuldstændigt. MD5, en endnu ældre hash, blev brudt endnu tidligere og blev brugt i et reelt angreb mod en CA.

Hash Output Status
MD5128-bitBrudt — aldrig brug
SHA-1160-bitBrudt — udfaset 2017
SHA-256256-bitAnbefalet standard
SHA-384/512384/512-bitStærkere, fuldt sikker

Tjek dit certifikats signaturalgoritme

openssl x509 -in cert.pem -noout -text | grep -i "Signature Algorithm"

Et sundt certifikat viser sha256WithRSAEncryption (RSA-nøgle) eller ecdsa-with-SHA256 (ECDSA-nøgle). Ser du sha1WithRSAEncryption eller md5WithRSAEncryption, skal certifikatet udskiftes straks. Direkte fra en server:

echo | openssl s_client -connect example.com:443 -servername example.com 2>/dev/null \
  | openssl x509 -noout -text | grep -i "Signature Algorithm" | head -1

SHA-256 i cipher suite-navnet er noget andet

Pas på en almindelig forveksling: SHA256 i slutningen af et cipher suite-navn som ECDHE-RSA-AES128-GCM-SHA256 henviser til hash'en brugt til nøgleafledning i selve TLS-sessionen — ikke til certifikatets signaturalgoritme. De er to forskellige ting, der tilfældigvis bruger samme hash-familie. Læs hvordan navnet er bygget op i hvad er en cipher suite.

Hvor SHA-1 stadig dukker op

Offentlige CA'er udsteder ikke længere SHA-1-certifikater, men de findes stadig i to hjørner: interne CA'er der aldrig blev opdateret, og gamle selvsignerede certifikater på intern infrastruktur. De udgør en reel risiko, fordi en intern angriber kan udnytte kollisionssvagheden — og de fanges sjældent i en browser-test, da interne systemer ikke besøges af compliance-scannere.

Sådan fanger CertControl forældede signaturer

CertControl læser signaturalgoritmen på hvert certifikat den finder — både offentlige endpoints og interne, opdaget via agenten — og rejser en finding med høj severity på alt der stadig bruger SHA-1 eller MD5. Så ser I de svage certifikater i et samlet overblik i stedet for at opdage dem ved en revision. Læs mere om certifikatets opbygning i hvad er et TLS-certifikat og hvordan kæden hænger sammen i certifikatkæden forklaret.

Ofte stillede spørgsmål

Hvad er forskellen på en hash og en signatur?

En hash er et fast-længde fingeraftryk af data. En signatur er hashen krypteret med en privat nøgle, så modtageren kan bekræfte både integritet og afsender. Signaturalgoritmen beskriver hvilken hash plus hvilken nøgletype der bruges.

Hvorfor er SHA-1 usikker når den ikke kan vendes om?

Sikkerheden afhænger ikke kun af at hashen ikke kan vendes om, men af kollisionsmodstand — at man ikke kan finde to inputs med samme hash. SHA-1's kollisionsmodstand er brudt, og det er nok til at forfalske signaturer.

Hvad betyder SHA256 i et cipher suite-navn så?

Her henviser SHA256 til hash'en brugt til nøgleafledning i TLS-sessionen, ikke til certifikatets signatur. Det er en separat brug af samme hash-familie.

Skal jeg bruge SHA-384 eller SHA-512 i stedet for SHA-256?

SHA-256 er fuldt sikker og standarden for de fleste certifikater. SHA-384 bruges typisk sammen med ECDSA P-384 eller når et compliance-krav forlanger det. Der er ingen praktisk sikkerhedsgrund til at fravælge SHA-256 til almindelig brug.

Hvordan ved jeg om jeg har gamle SHA-1-certifikater?

Tjek signaturalgoritmen med openssl, eller scan hele jeres flåde. De farligste sidder ofte på interne systemer og gamle selvsignerede certifikater, som ikke fanges af offentlige scannere.