berdav/greenpass

Release Country: CNAM - non verificato

st4nny opened this issue · 12 comments

Altro caso anomalo nel giro di test sempre con v2.1
La certificazione viene letta correttamente, ma la verifica del certificato non passa, ottengo Verified False (in rosso)
Ho provato a stampare a schermo da get_key_coseobj:
print(certificate)
print(pubkey)
print(self.getcoseobj(pubkey))
e ritornano correttamente ma gpp.verify() non ritorna il true di verifica. Chiaramente questo gp viene validato correttamente da VerificaC19.
Release Country CNAM
Version 1.3.0
Vaccination or test Country FR
Certificate Issuer CNAM

Come posso debuggare meglio la questione per darti più dati a supporto?

Ciao,

ho pushato un nuovo branch: issue-18-cnam-verification con una modifica (switch --list-keys) in grado di fare la lista delle varie chiavi.

Quelle di cnam dovrebbero essere:

176 fNstNUxgGSI= C:FR O:CNAM OU:180035024 CN:DSC_FR_023
180 7byt9scureM= C:FR O:CNAM OU:180035024 CN:DSC_FR_025
181 EDSWY8Hnul4= C:FR O:CNAM OU:180035024 CN:DSC_FR_020
182 IKMstf8yj/4= C:FR O:CNAM OU:180035024 CN:DSC_FR_024
189 l+UqotarLJc= C:FR O:CNAM OU:180035024 CN:DSC_FR_022
190 mqWkXpNR0Rk= C:FR O:CNAM OU:180035024 CN:DSC_FR_019
192 rVPuf3yKLBg= C:FR O:CNAM OU:180035024 CN:DSC_FR_021

controllerei se il tuo KID (ho aggiunto anche lo switch --kid) e' uno di questi.

ne ho 3 simili con cui fare i test e che non passano la verifica del certificato, tutti e 3 mi ritornano questo kid:
fGLuvg6n5wk=

tutti e 3 riportano
Release Country CNAM
Version 1.3.0
Vaccination or Test Country FR
Certificate Issuer CNAM

ciao, scusami per il ritardo ma e' stata una settimana piena di lavoro.

Puoi controllare di avere un file chiamato ~/.local/greenpass/fGLuvg6n5wk= ?

Puoi leggerlo con un comando come questo:

openssl x509 -in ~/.local/greenpass/fGLuvg6n5wk\= -inform DER -text

Il file è presente regolarmente.
Questo quello che ne viene fuori:

Certificate:
Data:
Version: 3 (0x2)
Serial Number: 4602565760344528260 (0x3fdf992c70b61584)
Signature Algorithm: ecdsa-with-SHA256
Issuer: C = LI, L = Vaduz, O = Liechtensteinische Landesverwaltung, CN = DGC-NB-CSCA-PROD-20210608, emailAddress = webmaster@llv.li
Validity
Not Before: Jun 8 07:42:00 2021 GMT
Not After : Jun 8 07:42:00 2023 GMT
Subject: C = LI, L = Vaduz, O = Liechtensteinische Landesverwaltung, CN = DGC-NB-DSC-TEST-PROD-20210608, emailAddress = webmaster@llv.li
Subject Public Key Info:
Public Key Algorithm: id-ecPublicKey
Public-Key: (256 bit)
pub:
04:06:71:54:8e:bf:05:a5:fa:55:69:51:6d:09:45:
bb:62:0e:89:06:4f:e7:d5:39:49:28:42:a9:9b:fa:
d9:3a:f0:04:cc:aa:70:a1:30:a9:5e:95:cf:3f:54:
8f:1a:1b:d0:5f:32:7e:8b:87:41:40:78:1b:77:0d:
92:0e:97:19:99
ASN1 OID: prime256v1
NIST CURVE: P-256
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Subject Key Identifier:
A7:44:8D:52:E9:4B:F6:DD:28:23:10:76:FA:4C:BE:2B:A4:A3:EA:C4
X509v3 Authority Key Identifier:
keyid:F4:9E:78:7C:16:DF:0E:7B:04:53:0C:D6:9A:78:34:28:1C:4D:DF:85

        X509v3 Key Usage: critical
            Digital Signature
        X509v3 CRL Distribution Points: 

            Full Name:
              URI:http://crl.llv.li/DGC-NB-CSCA-PROD-20210608

        Netscape Comment: 
            xca certificate
        X509v3 Extended Key Usage: 
            1.3.6.1.4.1.1847.2021.1.1
Signature Algorithm: ecdsa-with-SHA256
     30:44:02:20:4e:f1:a0:60:ad:e2:8f:d6:d9:bf:22:ac:86:8c:
     83:95:8a:d0:c1:74:7b:06:d8:f4:24:87:29:76:ae:8d:16:a1:
     02:20:77:7a:00:11:91:af:e3:72:28:98:e7:94:1e:d9:95:88:
     89:0d:fa:c4:45:53:f2:17:fa:bf:12:c9:a1:bf:9e:8f

-----BEGIN CERTIFICATE-----
MIIC8zCCApqgAwIBAgIIP9+ZLHC2FYQwCgYIKoZIzj0EAwIwgZAxCzAJBgNVBAYT
AkxJMQ4wDAYDVQQHEwVWYWR1ejEsMCoGA1UEChMjTGllY2h0ZW5zdGVpbmlzY2hl
IExhbmRlc3ZlcndhbHR1bmcxIjAgBgNVBAMTGURHQy1OQi1DU0NBLVBST0QtMjAy
MTA2MDgxHzAdBgkqhkiG9w0BCQEWEHdlYm1hc3RlckBsbHYubGkwHhcNMjEwNjA4
MDc0MjAwWhcNMjMwNjA4MDc0MjAwWjCBlDELMAkGA1UEBhMCTEkxDjAMBgNVBAcT
BVZhZHV6MSwwKgYDVQQKEyNMaWVjaHRlbnN0ZWluaXNjaGUgTGFuZGVzdmVyd2Fs
dHVuZzEmMCQGA1UEAxMdREdDLU5CLURTQy1URVNULVBST0QtMjAyMTA2MDgxHzAd
BgkqhkiG9w0BCQEWEHdlYm1hc3RlckBsbHYubGkwWTATBgcqhkjOPQIBBggqhkjO
PQMBBwNCAAQGcVSOvwWl+lVpUW0JRbtiDokGT+fVOUkoQqmb+tk68ATMqnChMKle
lc8/VI8aG9BfMn6Lh0FAeBt3DZIOlxmZo4HXMIHUMAwGA1UdEwEB/wQCMAAwHQYD
VR0OBBYEFKdEjVLpS/bdKCMQdvpMviuko+rEMB8GA1UdIwQYMBaAFPSeeHwW3w57
BFMM1pp4NCgcTd+FMA4GA1UdDwEB/wQEAwIHgDA8BgNVHR8ENTAzMDGgL6Athito
dHRwOi8vY3JsLmxsdi5saS9ER0MtTkItQ1NDQS1QUk9ELTIwMjEwNjA4MB4GCWCG
SAGG+EIBDQQRFg94Y2EgY2VydGlmaWNhdGUwFgYDVR0lBA8wDQYLKwYBBAGON49l
AQEwCgYIKoZIzj0EAwIDRwAwRAIgTvGgYK3ij9bZvyKshoyDlYrQwXR7Btj0JIcp
dq6NFqECIHd6ABGRr+NyKJjnlB7ZlYiJDfrERVPyF/q/Esmhv56P
-----END CERTIFICATE-----

Ciao, possiedi qualche altro greenpass firmato da qualche altra chiave non italiana?

Sto controllando la procedura di verifica, potrebbe essere quella, vedo che con keyid 90, 91, 92 il server mi restituisce sempre lo stesso risultato (la chiave pubblica del Liechtenstein).

EDIT: Sembra proprio un problema di verifica della chiave, un certificato generato con la chiave "leakata" viene verificato con un kid relativo all'indice successivo dentro all'endpoint status (kid: 15 + 1 = 16). Il mio certificato personale (firmato dall'ente italiano) viene verificato con l'indice non modificato (kid:5)

Ciao, relativamente alle ultime notizie sul leak non saprei, al momento si ha evidenza di questi soli:
https://attivissimo.blogspot.com/2021/10/perche-questi-codici-qr-sembrano-green.html
dei quali (il terzo) ancora supera la validazione.

Per quanto riguarda il problema segnalato, l'applicazione non valida correttamente diversi certificati non italiani tra cui:

  • germania, spagna, olanda e francia

Ciao, sembra essere cambiato il metodo per la verifica, ho aggiornato.

Puoi provare con quei certificati e il master corrente?

ok scaricato il master, mi ha dato ModuleNotFoundError: No module named 'bs4' e l'ho installato.
Ora spagna olanda e francia passano correttamente. Rimane l'errore su germania sul quale ottengo:
Could not find KID
Traceback (most recent call last):
File "/home/gp/greenpass_master20211027/./greenpass.py", line 128, in
res = logic.verify_certificate(out, gpp, sm, cup)
File "/home/gp/greenpass_master20211027/greenpass/logic.py", line 315, in verify_certificate
key = cup.get_key_coseobj(gpp.get_kid())
File "/home/gp/greenpass_master20211027/greenpass/api.py", line 130, in get_key_coseobj
certificate = self.get_key(kid)
File "/home/gp/greenpass_master20211027/greenpass/api.py", line 120, in get_key
keytype, idx = self.get_kid_idx(kid)
File "/home/gp/greenpass_master20211027/greenpass/api.py", line 64, in get_kid_idx
k = self._get_kid_idx(kid, "nhs")
File "/home/gp/greenpass_master20211027/greenpass/api.py", line 51, in _get_kid_idx
hexkid = hexlify(kid)
TypeError: a bytes-like object is required, not 'NoneType'

e poi su nhs su cui ho:
Traceback (most recent call last):
File "/home/gp/greenpass_master20211027/./greenpass.py", line 128, in
res = logic.verify_certificate(out, gpp, sm, cup)
File "/home/gp/greenpass_master20211027/greenpass/logic.py", line 315, in verify_certificate
key = cup.get_key_coseobj(gpp.get_kid())
File "/home/gp/greenpass_master20211027/greenpass/api.py", line 130, in get_key_coseobj
certificate = self.get_key(kid)
File "/home/gp/greenpass_master20211027/greenpass/api.py", line 123, in get_key
pubkey = self.get_key_nhs(idx)
File "/home/gp/greenpass_master20211027/greenpass/api.py", line 115, in get_key_nhs
if targetkid == hexkid:
NameError: name 'hexkid' is not defined

Ok, scusa mi ero dimenticato di avvertirti di bs4, l'ho aggiunto ai requisiti (poi lancero' il setup.py).

Questo e' abbastanza strano, il gp e' pubblico? Riesci a passarmelo via mail? Trovi l'indirizzo nel mio profilo.

Ho aggiunto una modifica al master, puoi provare questo, dovrebbe supportare i greenpass che sono formati diversamente (hanno la KID non nel phdr ma nell'uhdr della struttura COSE).

Fammi sapere

Confermo, anche il de ora è ok.

Chiudo questa issue allora, ci sentiamo nell'altra per il NHS.

Posso riaprirla se ne trovi qualcuno che non funziona.