gRPC SSL/TLS
Proteggere il canale gRPC del Babel Licensing Service con SSL/TLS è essenziale per garantire una comunicazione cifrata e sicura tra le applicazioni client e il server. SSL/TLS (Secure Sockets Layer/Transport Layer Security) è un protocollo di comunicazione sicuro che protegge l’integrità, la riservatezza e l’autenticità dei dati.
Per configurare SSL/TLS nel Babel Licensing Service devi seguire alcuni passi. Per prima cosa devi generare o ottenere un certificato SSL/TLS valido. Il certificato serve a stabilire l’identità del server e a cifrare la comunicazione.
Una volta ottenuto il certificato SSL/TLS, devi configurare il Babel Licensing Service perché lo utilizzi. Per farlo, specifica il percorso e la password del certificato nelle impostazioni di configurazione del Babel Licensing Service e delle applicazioni client.
Certificati autofirmati
I certificati autofirmati sono certificati digitali generati e firmati dalla stessa entità, senza il coinvolgimento di un’autorità di certificazione terza attendibile. A differenza dei certificati emessi da CA riconosciute, i certificati autofirmati non sono considerati attendibili per impostazione predefinita dai browser web o dai sistemi operativi.
I certificati autofirmati sono particolarmente utili durante lo sviluppo, perché permettono una comunicazione sicura senza dover ottenere un certificato da un’autorità attendibile, operazione che può richiedere tempo e denaro. Sono ideali per gli scenari di test e sviluppo, in cui l’obiettivo principale è stabilire un canale di comunicazione cifrato.
Per creare un certificato autofirmato puoi usare PowerShell, un potente linguaggio di scripting e shell da riga di comando. Il seguente frammento di codice PowerShell mostra come generare un certificato autofirmato:
# Create cert
$certname = "<cert name>"
$certpassword = "<cert password>"
$cert = New-SelfSignedCertificate -Subject "CN=$certname" -CertStoreLocation "Cert:\CurrentUser\My" -KeyExportPolicy Exportable -KeySpec Signature -KeyLength 2048 -KeyAlgorithm RSA -HashAlgorithm SHA256
# Export PFX
Export-Certificate -Cert $cert -FilePath "$certname.cer"
$mypwd = ConvertTo-SecureString -String "$certpassword" -Force -AsPlainText
Export-PfxCertificate -Cert $cert -FilePath "$certname.pfx" -Password $mypwd
# Delete from local store
$thumbprint = Get-ChildItem -Path "Cert:\CurrentUser\My" | Where-Object {$_.Subject -Match "$certname"} | Select-Object -ExpandProperty Thumbprint
Remove-Item -Path "Cert:\CurrentUser\My\$thumbprint" -DeleteKeyQuesto codice PowerShell genera un certificato autofirmato con i valori certname e certpassword indicati. Il cmdlet New-SelfSignedCertificate crea il certificato con parametri specifici, come il nome del soggetto, la lunghezza della chiave e l’algoritmo di hash.
Il certificato viene poi esportato nei formati .cer e .pfx con i cmdlet Export-Certificate e Export-PfxCertificate, rispettivamente. Il file .cer contiene la chiave pubblica, mentre il file .pfx contiene la chiave privata insieme al certificato.
Infine il certificato viene eliminato dall’archivio certificati locale con il cmdlet Remove-Item. Questo passo è facoltativo e serve ad assicurarsi che il certificato autofirmato non resti nell’archivio certificati locale dopo l’esportazione.
Usando questo codice PowerShell per creare un certificato autofirmato puoi configurare facilmente SSL/TLS nel Babel Licensing Service durante lo sviluppo e ottenere una comunicazione sicura su canali cifrati.
Server
I protocolli Secure Socket Layer (SSL) e Transport Layer Security (TLS) hanno un ruolo fondamentale nel garantire una comunicazione sicura tra client e server. Il Babel Licensing Service si integra direttamente con gRPC SSL/TLS e ti permette di stabilire un canale sicuro per trasmettere i dati in rete.
La sottosezione “Certificate” nella configurazione dell’endpoint gRPC ti permette di specificare i dettagli del certificato SSL/TLS.
"Endpoints": {
"gRPC": {
"Url": "https://localhost:5005",
"Protocols": "Http1AndHttp2",
"Certificate": {
"AllowInvalid": true,
"Path": "<cert file>.pfx",
"Password": "<cert password>"
}
}
}Qui puoi impostare il parametro “AllowInvalid” su true quando usi un certificato autofirmato. Questa configurazione è adatta agli scenari di sviluppo e test, in cui i certificati autofirmati sono di uso comune.
Protocolli
Abilitare i protocolli HTTP1AndHttp2 nella configurazione gRPC SSL/TLS offre al tuo Babel Licensing Service maggiore flessibilità e compatibilità. Questa opzione di configurazione è disponibile solo quando SSL/TLS è abilitato, perché sfrutta le capacità di negoziazione del protocollo fornite da ALPN (Application-Layer Protocol Negotiation), l’estensione del livello TLS.
Quando SSL/TLS è abilitato, il livello TLS fa da mediatore tra i protocolli e permette a HTTP/1 e HTTP/2 di coesistere sulla stessa porta. I client che usano HTTP/1 o HTTP/2 possono quindi comunicare con il Babel Licensing Service senza bisogno di porte o configurazioni separate.
HTTP/1 è un protocollo molto diffuso per la comunicazione sul web. Segue un modello richiesta/risposta, in cui i client inviano richieste ai server e ricevono le risposte corrispondenti. Il protocollo HTTP/1 è noto per la sua compatibilità con numerose applicazioni client e framework.
Il protocollo HTTP/2, invece, porta miglioramenti significativi delle prestazioni rispetto al predecessore. Introduce funzionalità come il multiplexing, la compressione delle intestazioni e il server push, che rendono la comunicazione tra client e server più veloce ed efficiente. Abilitando HTTP/2 puoi sfruttare queste capacità avanzate per ottenere prestazioni e reattività migliori.
Client
Per configurare un’applicazione client in modo che protegga il canale gRPC con SSL/TLS, puoi usare il codice seguente:
BabelLicensing.Configure(config =>
{
config.ServiceUrl = "https://localhost:5005";
var certificate = new X509Certificate2("<cert file>.pfx", "<cert password>");
config.UseGrpc(options =>
{
options.HttpHandler = new HttpClientHandler()
{
ClientCertificates = { certificate },
ServerCertificateCustomValidationCallback = HttpClientHandler.DangerousAcceptAnyServerCertificateValidator
};
});
});In questo frammento di codice l’oggetto config rappresenta la configurazione per il Babel Licensing Service. La proprietà ServiceUrl è impostata sull’URL del servizio, che include lo schema https per indicare l’uso di SSL/TLS.
La variabile certificate viene creata caricando il file del certificato (in formato .pfx) e fornendo la password corrispondente. Il metodo UseGrpc configura le opzioni del canale gRPC tramite una callback, in cui l’HttpClientHandler viene impostato con la proprietà ClientCertificates. In questo modo il client presenta il certificato appropriato durante l’handshake SSL/TLS.
Inoltre ServerCertificateCustomValidationCallback è impostato su HttpClientHandler.DangerousAcceptAnyServerCertificateValidator. Questa callback aggira la convalida predefinita del certificato del server e accetta qualsiasi certificato presentato dal Babel Licensing Service. È adatta allo sviluppo e ai test, ma negli ambienti di produzione va usata con cautela.
Configurando l’applicazione client in questo modo stabilisci un canale gRPC sicuro che usa SSL/TLS per comunicare con il Babel Licensing Service.