Il bilanciatore software-defined di AVI Network consente, tramite l’applicazione di un Application Profile ad un Virtual Service, di richiedere al client un certificato SSL client:
La scelta del PKI Profile determina quali certificati saranno ritenuti validi… ad esempio è possibile configurare la Certificate Authority della propria azienda.
Questa configurazione non consente però delle verifiche più puntuali sul certificato, ad esempio sul valore di DN (Distinguished Name).
Possiamo scrivere un semplice datascript che, applicato al medesimo Application Profile, effettui tale verifica:
clientDN = avi.ssl.client_cert(avi.CLIENT_CERT_SUBJECT) validDN = "/C=MyCountry/ST=MyState/L=MyLocation/OU=MyOU/CN=myCN" if clientDN == nil then avi.vs.log("Missing client certificate DN") avi.http.response(400, {content_type="text/html"}, "Missing SSL client certificate") elseif clientDN ~= validDN then avi.vs.log("Client certificate DN doesn't match: " .. clientDN .. " != " .. validDN) avi.http.response(400, {content_type="text/html"}, "Invalid SSL client certificate") end |
Lo script, applicato all’evento HTTP Request, estrae il DN dal certificato fornito dal client e lo memorizza nella variabile clientDN. La variabile validDN contiene invece la stringa attesa.
Una volta verificato che effettivamente il client abbia passato un certificato, il relativo DN viene confrontato con quello valido e – se differente – viene ritornato al client un codice di errore HTTP 400.
Una riga con l’evidenza dell’errore è anche scritta nel log del Virtual Service; log che può essere visualizzato nel relativo tab:
e che contiene i due DN (quello ricevuto dal client e quello atteso):