Qualcuno può confermare che il carattere jolly viene rimosso da Indy o dalle librerie OpenSSL, sebbene sia necessario verificare il nome host?
No, OpenSSL non lo rimuove.
Non so della libreria di Indy.
qualcuno può confermare che il carattere jolly viene rimosso da Indy o le librerie OpenSSL, anche se è necessario verificare l'hostname?
sto citando questo due volte per un motivo :) Posizionando i nomi dei server nel Common Name (CN) è sconsigliata sia dalla IETF e Forum CA/B (quello che i browser seguono).
Quello che probabilmente stai vivendo è qualcosa come CN=example.com
.In questo caso, example.com
non è un nome server; piuttosto è è un dominio. Quindi tu non dovresti supporre che significhi corrispondere a *.example.com
.
e se un server risponde a https://example.com
, si dovrebbe solo accettare il certificato se il nome soggetto alternativo comprende example.com
perché i domini sono elencati nel NC dal CA pubbliche. Le CA pubbliche inseriscono nomi DNS nella SAN perché seguono i forum CA/B.
Qualcuno ha un'idea per verificare il nome host in queste circostanze?
OpenSSL prima 1.1.0 fatto non eseguire corrispondenza nome host. Lo sviluppatore ha dovuto farlo. OpenSSL 1.1.0 e versioni successive ha la funzionalità integrata. Vedi X509_check_host(3)
e gli amici.
per abbinare un nome host, è necessario raccogliere tutti i nomi da sia il nome comune (CN) e il nome soggetto alternativo (SAN). Quindi, di solito è semplice come un abbinamento di espressioni regolari.
IETF è veloce e loose e consente di visualizzare un nome host nel CN o nella SAN. Il forum CA/B e i browser sono più rigidi: se un nome host è nel CN, deve essere presente anche nella SAN (sì, deve essere elencato due volte). In caso contrario, il forum CA/B e i browser prevedono tutti i nomi host nella SAN.
Credo che OpenSSL e il forum di CA/B consentano solo un carattere jolly nell'etichetta più a sinistra. Credo che IETF permetta ai caratteri jolly di comparire ovunque.
Se si desidera visualizzare il codice di esempio, verificare l'implementazione di cURL. cURL utilizza OpenSSL, ma non dipende da 1.1.0 di X509_check_host(3)
e dagli amici. cURL ha una sua implementazione.
Un avviso rapido. La corrispondenza del nome host è un'arte nera. Ad esempio ....
IETF consente la corrispondenza con un dominio di primo livello globale (gTLD) come *.com
o *.net
; e Country Top Level Domain (ccTLD) come *.uk
o *.us
. Considero questo un attacco perché so che non esiste una singola CA che possa pretendere di "possedere" o "certificare" un gTLD. Se provo uno di quei certs in natura, allora lo rifiuto.
I forum CA/B non consentono gTLD o ccTLD con caratteri jolly. I browser tentano di evitarlo usando Public Suffix List (PSL). Le cose sono peggiorate solo con i domini vanity, come *.google
.
C'è un'altra cosa che i browser tentano di fare con la PSL. Tentano di scavare i confini amministrativi sui sottodomini. Ad esempio, Amazon possiede tutto di amazon.com, ma delegano l'autorizzazione ai sottodomini, come example.amazon.com.Pertanto, il PSL tenta di consentire ad Amazon di controllare il proprio dominio amazon.com
, ma non il sottodominio relativo al commerciante di example.amazon.com
.
IETF sta tentando di affrontare i confini amministrativi nel DBOUND Working Group. Ma le cose sembrano essere bloccate in commissione.
I dati del certificato è fornito da OpenSSL stessa. La classe 'TIdX509' di Indy racchiude semplicemente un handle' PX509' fornito da OpenSSL all'interno della funzione di callback di verifica di Indy. 'TIdX509' non scherza con i dati del certificato, lo presenta così com'è. La proprietà 'Subject' racchiude un handle' PX509_NAME' dalla funzione 'X509_get_subject_name()' di OpenSSL, e la proprietà 'OneLine' restituisce qualsiasi valore restituisce la funzione' X509_NAME_oneline() 'di OpenSSL. Quindi è OpenSSL stesso che sta eliminando il carattere jolly. –
Detto questo, OpenSSL ha le funzioni 'X509_check_host()' e 'certificate_host_name_override()'. Puoi passare loro l'handle 'PX509' originale (il membro' TIdX509.FX509' - dovresti usare una classe accessor per raggiungerlo comunque) e il nome host a cui ti sei connesso. –
Grazie a Remy per la rapida risposta. Ci proverò domani e ti farò sapere i miei risultati. – Cheesy