Puncte:2

De ce funcționează RSA DANE TLSA, dar ECDSA DANE TLSA eșuează?

drapel id

Am achiziționat două certificate SSL cu un singur domeniu, wildcard de la Namecheap/Sectigo/Comodo. Mi-am generat CSR-urile în mod tipic folosind openssl.

$ openssl req -newkey rsa:4096 -keyout example.com.rsa.key -out example.com.rsa.csr
$ openssl genpkey -genparam -algorithm ec -pkeyopt ec_paramgen_curve:P-256 -out example.com.ecdsa.pem
$ openssl req -newkey ec:example.com.ecdsa.pem -keyout example.com.ecdsa.key -out example.com.ecdsa.csr

Am trimis CSR-urile și mi s-a eliberat fiecare pachet de certificate, inclusiv pachetul .crt și .ca, totul conform așteptărilor.

Am reușit să instalez ambele certificate pentru utilizare de către Postfix. Fiecare avea nevoie de o versiune necriptată a cheii private, permisiunile securizate fiind menținute.

$ openssl rsa -in example.com.rsa.key -out example.com.rsa.key.uneencrypted
$ openssl ec -in example.com.ecdsa.key -out example.com.ecdsa.key.uneencrypted

Am configurat corect SPF, DKIM, DMARC și DNSSEC, fiecare confirmat de instrumente terțe și am trimis și primit e-mail cu scoruri de promovare în anteturi.

Am folosit din nou openssl pentru a genera hash-urile certificatelor pentru înregistrările mele DANE TLSA. Am creat două seturi, câte un set pentru fiecare algoritm și atât pentru portul 25, cât și pentru 587. Acestea au fost adăugate la fișierul meu de zonă, verificate cu named-checkzone, semnate cu dnssec-signzone și publicate în DNS.

Am început prin a folosi două instrumente externe pentru a verifica configurația, primul la danecheck iar al doilea la dane.sys4.de. Ambele au raportat succes general folosind certificatul RSA, dar eșecul specific al certificatului ECDSA.

Primul a reușit, raportând parțial:

DANE TLSA 3 1 1 [9679fc29..]: Certificat EE potrivit OK
DANE TLSA 3 1 1 [ecd29ffd..]: FAIL nu s-a potrivit cu certificatul EE

Acesta din urmă a reușit, raportând parțial:

3, 1, 1 9679fc296960a23c[...]149b990a680cad8b *în verde*
3, 1, 1 ecd29ffd76d61326[...]dadbcfa42eae9158 - nu se poate obține certificatul de emitent local: (20) *în roșu*

Am încercat să remediez acest lucru modificând diferitele câmpuri de utilizare, selector și potrivire, 3 0 1, 3 1 1 etc. Am încercat să generez hash-urile local cu openssl și folosind instrumente online precum gen_tlsa. Ambele instrumente au produs rezultate hashing identice pentru ambele certificate. Din nou, RSA TLSA a reușit în timp ce înregistrările ECDSA au eșuat. În cele din urmă, am găsit scriptul chaingen, care generează toate 3 0 1, 3 1 1, 3 0 2 și 3 1 2 hash-uri pe care le-am inclus pentru fiecare port fără nicio îmbunătățire pentru înregistrările ECDSA.

Am petrecut câteva ore încercând diferite permutări ale fiecărui certificat, înregistrări TLSA, porturi etc. Am încercat să adaug înregistrări TLSA (2 0 1) pentru cheile părinte ale înregistrărilor ECDSA la DNS. Am încercat să schimb certificatul disponibil pentru Postfix pentru a include ca-bundle-ul împreună cu certificatul într-un fișier .pem.

Cercetând am găsit această postare la utilizatorii exim intitulat „Cum se folosește certificatul ec cu certificatele DANE și ec+rsa” de Viktor Dukhovni, care nu are nevoie de prezentare în cercul Postfix/DANE.El a sugerat că poate instrumentele online au fost oportuniste și, de îndată ce au reușit cu certificatele RSA, nu s-au obosit să testeze cu certificatele ECDSA. A oferit apeluri foarte valoroase către openssl pentru a arăta că într-adevăr cheile erau corecte în situația afișului. Am duplicat acest efort cu două scripturi shell scurte folosind codul lui Viktor înlocuind informațiile mele, unul numit checkrsa și celălalt numit checkecdsa.

Cele două scripturi execută două comenzi fiecare cu următoarea configurare pentru checkrsa (pentru IPv4):

$ cat checkrsa

ecou „renunț” | openssl s_client -starttls smtp -connect mail.example.com:25 -4 -verify 9 \
    -dane_tlsa_domain mail.example.com \
    -dane_tlsa_rrdata "3 0 1 c487cdb079b49d12ee357d9547c6f67448a2ec2e789c86c65d213a57aaec4ac9" \
    -dane_tlsa_rrdata „3 1 1 9679fc296960a23c89fed73d8e6a6d0ab33f0abc99d48c44149b990a680cad8b” \
    -sigalgs rsa_pkcs1_sha256:rsa_pkcs1_sha384:rsa_pkcs1_sha512:rsa_pss_rsae_sha256:rsa_pss_rsae_sha384:rsa_pss_rsae_sha512:rsa_pkcs1_sha512:rsa_pss_rsae_sha256:rsa_pss_rsae_sh

Și checkecdsa (pentru IPv6):

$ cat checkecdsa
ecou „renunț” | openssl s_client -starttls smtp -connect mail.example.com:25 -6 -verify 9 \
    -dane_tlsa_domain mail.example.com \
    -dane_tlsa_rrdata "3 0 1 87a8c75581c9d022062416a37387de1ec30d311e4d7afbeb892be287fb13bfc5" \
    -dane_tlsa_rrdata "3 1 1 ecd29ffd76d6132629ddbf7ccd31460e23ac3b4a50d47bccdadbcfa42eae9158" \
    -sigalgs ecdsa_secp256r1_sha256:ecdsa_secp384r1_sha384:ecdsa_secp521r1_sha512

Rezultatele:

root@server:~/bin# ./checkrsa 
verificați adâncimea este de 9
CONECTAT(00000003)
adâncime=0 CN = *.example.com
verifica returnarea:1
---
Lanț de certificate
 0 s:CN = *.example.com
   i:C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA
---
Certificat de server
-----ÎNCEPE CERTIFICAT-----
MIIHNDCCBhygAwIBAgIQAzfJZrX65NjG2FvLmk0I0jANBgkqhkiG9w0BAQsFADCB
...
Xw8UgZDYihDaIxT8SUQUgV9weQg5Lkru
-----CERTIFICAT FINAL-----
subiect=CN = *.example.com

emitent=C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo RSA Domain Validation Secure Server CA

---
Nu s-au trimis nume de CA de certificat de client
Rezumat peer signing: SHA256
Tip semnătură peer: RSA-PSS
Cheie Temp Server: X25519, 253 de biți
---
SSL handshake a citit 2904 de octeți și a scris 386 de octeți
Verificare: OK
Nume de familie verificat: *.example.com
DANE TLSA 3 1 1 ...99d48c44149b990a680cad8b certificat EE potrivit la adâncimea 0
---
Nou, TLSv1.3, Cipher este TLS_AES_256_GCM_SHA384
Cheia publică a serverului este de 4096 de biți
Renegocierea sigură NU ESTE acceptată
Compresie: NIMIC
Extindere: NIMIC
Nu s-a negociat ALPN
Datele timpurii nu au fost trimise
Verificați codul de returnare: 0 (ok)
---
250 BĂRĂTIRE
TERMINAT
root@server:~/bin# ./checkecdsa 
verificați adâncimea este de 9
CONECTAT(00000003)
adâncime=0 CN = *.example.com
verifica returnarea:1
---
Lanț de certificate
 0 s:CN = *.example.com
   i:C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo 
ECC Domain Validation Secure Server CA
---
Certificat de server
-----ÎNCEPE CERTIFICAT-----
MIIEqDCCBE6gAwIBAgIRAIIKQBNWh2R9wwvn2/j30PgwCgYIKoZIzj0EAwIwgY8x
...
YemreHq/Cd5HPgIgE6InSF5ko6mWo9GMpR7w1ijpbsnShlS6EiYrpZozD0s=
-----CERTIFICAT FINAL-----
subiect=CN = *.example.com

emitent=C = GB, ST = Greater Manchester, L = Salford, O = Sectigo Limited, CN = Sectigo ECC Domain Validation Secure Server CA

---
Nu s-au trimis nume de CA de certificat de client
Rezumat peer signing: SHA256
Tip semnătură peer: ECDSA
Cheie Temp Server: X25519, 253 de biți
---
SSL handshake a citit 1811 de octeți și a scris 348 de octeți
Verificare: OK
Nume de familie verificat: *.example.com
DANE TLSA 3 1 1 ...50d47bccdadbcfa42eae9158 certificat EE potrivit la adâncimea 0
---
Nou, TLSv1.3, Cipher este TLS_AES_256_GCM_SHA384
Cheia publică a serverului este de 256 de biți
Renegocierea sigură NU ESTE acceptată
Compresie: NIMIC
Extindere: NIMIC
Nu s-a negociat ALPN
Datele timpurii nu au fost trimise
Verificați codul de returnare: 0 (ok)
---
250 BĂRĂTIRE
TERMINAT

Așadar, ambele certificate se înregistrează local, dar continuă să eșueze extern.

Văzând că mesajul lui Viktor a indicat că, probabil, instrumentele, având succes cu RSA, au scapat pe hash-urile ECDSA, am încercat de asemenea să public doar înregistrările ECDSA TLSA. Rezultatele au arătat un eșec complet cu doar hash-urile ECDSA pe cont propriu.

Deci, sunt lăsat cu această situație: Am două seturi de certificate SSL, unul RSA, celălalt ECDSA. Ambele certificate au succes în Postfix. Ambele certificate checkout cu openssl. Publicarea ambelor certificate trece în general, pe baza certificatelor RSA, observând că certificatele ECDSA eșuează. Certificatele ECDSA reușesc la nivel local, dar eșuează extern.

Nu sunt sigur de unde să merg de aici și caut ajutor pentru a obține configurarea certificatului meu ECDSA în paralel cu înregistrările mele RSA pentru DANE.

anx avatar
drapel fr
anx
S-ar putea să găsiți [Hardenize](https://www.hardenize.com/) și [crt.sh](https://crt.sh/) mai utile pentru rezultatul lor per-certificat (-lanț).Sunteți destul de sigur că serverul dvs. trimite de-a lungul intermediarului - Ar trebui, pentru că ce rost are să fie semnat de *Sectigo* altfel?
synacksoldier avatar
drapel id
Nu sunt deloc sigur. Am presupus că lanțul de încredere a fost de așa natură încât certificatele mele ca frunze ar fi suficient de aproape de o înregistrare cunoscută/publicată pentru a fi utile „din cutie”. Am încercat să includ informații despre lacune ale cheilor părinte pentru a rezolva problema fără a cunoaște termenul „intermediar” sau cum se leagă de situația mea. Voi încerca să cercetez în continuare cum să furnizez astfel de informații.
anx avatar
drapel fr
anx
CA ți-a dat două lucruri: certificatul în sine („frunză”, .crt) și altele pe care să le trimiți împreună cu el („intermediari”, .ca-bundle), cei pe care ei cred că vor conecta lanțul la rădăcini cunoscute și de încredere. Dacă CA furnizează fiecare separat, trebuie să creați, pentru fiecare algoritm, un fișier care le conține pe ambele (1: certificatul dvs. ecc + intermediarii ecc 2: certul dvs. rsa + intermediarii rsa). *Bănuiesc* că ai dat doar certificatul Postfix. Apoi, configurația ta DANE va continua să funcționeze, dar *în plus* certificatul tău va fi ușor verificabil chiar și pentru clienții care încearcă doar să vadă dacă se conectează la o CA rădăcină de încredere.
Puncte:1
drapel fr
anx

Da, instrumentele pe care le-ați menționat v-au dat rezultate înșelătoare.

Un test bun trebuie să examineze produsul încrucișat al adreselor IP ori algoritmi și apoi pentru fiecare dintre aceștia: verificați dacă lanțurile de certificate prezentate ajung la un CA de încredere. și indiferent dacă se conectează sau se potrivește cu un certificat publicat prin TLSA.Adică 8 pași de verificare din 4 încercări unice de negociere, înainte chiar de a lua în considerare versiunile mai vechi de protocol și SNI.

Unele teste încearcă doar primul IP, unele teste încearcă doar prima suită de criptare negociată. Majoritatea testelor nu reușesc să raporteze într-un limbaj clar dacă potrivirea DANE sau PKI a eșuat.

The s_client comanda pe care ai incercat-o e ok... dar vrei să alergi patru nu doi comenzi (de două ori mai mult, dacă utilizați IPv4 și IPv6). Pentru că eu suspect în timp ce înregistrările dvs. TLSA sunt în regulă, nu trimiteți încă intermediari (corecți).

synacksoldier avatar
drapel id
Copie bună despre necesitatea a două apeluri la openssl s_client pentru fiecare versiune ip (v4,v6). Am actualizat textul pentru a include un exemplu pentru fiecare versiune.Dar, ce ar trebui să includ înainte de asta? Ce îmi lipsește înainte de a extinde pentru versiunile ip?

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.