Ho fatto la prova che mi hai suggerito:
openssl s_client -connect sdi.hipoges.com:443 -servername sdi.hipoges.com
CONNECTED(0000019C)
depth=1 C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
verify error:num=19:self signed certificate in certificate chain
verify return:1
depth=1 C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
verify return:1
depth=0 C = IT, O = Agenzia delle Entrate, OU = Fatturazione Elettronica, OU = Server, CN = SDI.HIPOGES.COM
verify return:1
Certificate chain
0 s:C = IT, O = Agenzia delle Entrate, OU = Fatturazione Elettronica, OU = Server, CN = SDI.HIPOGES.COM
i:C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
1 s:C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
i:C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
openssl s_client -connect sdi.hipoges.com:443
CONNECTED(000001B0)
depth=1 C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
verify error:num=19:self signed certificate in certificate chain
verify return:1
depth=1 C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
verify return:1
depth=0 C = IT, O = Agenzia delle Entrate, OU = Fatturazione Elettronica, OU = Server, CN = SDI.HIPOGES.COM
verify return:1
Certificate chain
0 s:C = IT, O = Agenzia delle Entrate, OU = Fatturazione Elettronica, OU = Server, CN = SDI.HIPOGES.COM
i:C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
1 s:C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
i:C = IT, O = Agenzia delle Entrate, CN = CA Agenzia delle Entrate
ed effettivamente entrambi contengono il certificato server firmato dall’AdE.
Però ho approfondito la questione dello SNI di cui mi parli.
Il dominio sdi.hipoges.com è un dominio custom che uso per mascherare il reale endpoint del mio Server (lavoro su SAP e questo era un prerequisito fondamentale da implementare). Quindi se chiamo l’endpoint https://sdi.hipoges.com/cxf/hiplaw/ItalyReceiveInvoice vengo direzionato correttamente al vero endpoint del server (ho testato questa cosa tramite Postman).
Ma visto che SDI non invia il campo SNI, invece di richiedere sdi.hipoges.com lo SDI si connette direttamente all’indirizzo IP del dominio. Infatti facendo il seguente test trovo:
openssl s_client -connect 20.82.83.59:443
CONNECTED(0000015C)
Can’t use SSL_get_servername
depth=1 C = US, O = DigiCert Inc, CN = DigiCert Global G2 TLS RSA SHA256 2020 CA1
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 C = DE, ST = Baden-W\C3\BCrttemberg, L = Walldorf, O = SAP SE, CN = *.cf.eu20-001.hana.ondemand.com
verify return:1
Certificate chain
0 s:C = DE, ST = Baden-W\C3\BCrttemberg, L = Walldorf, O = SAP SE, CN = *.cf.eu20-001.hana.ondemand.com
i:C = US, O = DigiCert Inc, CN = DigiCert Global G2 TLS RSA SHA256 2020 CA1
1 s:C = US, O = DigiCert Inc, CN = DigiCert Global G2 TLS RSA SHA256 2020 CA1
i:C = US, O = DigiCert Inc, OU = www.digicert.com, CN = DigiCert Global Root G2
e qui giustamente il certificato firmato dall’AdE non c’è.
Mi confermi di aver capito bene il problema? Se ho capito bene dovrò essere io a trovare una soluzione, tramite magari un reverse proxy. Cosa che però mi sembra abbastanza strana, perchè nella guida ufficiale SAP che ho seguito non fa nessun riferimento a questo.