Configurazione di un certificato per l'utilizzo con SSL

I servizi Web XML nativi rappresentano una funzionalità deprecata. Questa caratteristica verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa caratteristica in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata.

Per le comunicazioni SSL (Secure Sockets Layer), è necessario che un server HTTP disponga di un certificato registrato per ogni socket, ovvero combinazione di porta e indirizzo IP, abilitato per l'utilizzo di SSL. I certificati devono essere autorizzati per l'autenticazione server. A tale scopo, è possibile ottenere un certificato SSL da un'autorità di certificazione, ad esempio Verisign, oppure, se il certificato è necessario per l'esecuzione di test, è possibile utilizzare gli strumenti per l'emissione e la creazione di un certificato.

Indipendentemente dal fatto che il certificato sia stato ottenuto o emesso, è necessario registrarlo nel server. Per registrare, eseguire query su ed eliminare i certificati SSL, è consigliabile utilizzare l'utilità di configurazione HTTP (HttpCfg.exe).

Registrazione di certificati SSL

Per registrare un certificato, utilizzare il comando seguente:

httpcfg set ssl /iIP:Port**/hHash/g**Guid

Argomenti

  • IP:Port
    Combinazione di porta e indirizzo IP per cui si sta registrando il certificato.

  • Hash
    Hash del certificato.

    Nota

    È possibile ottenere l'hash del certificato dall'archivio certificati. L'archivio può essere visualizzato utilizzando lo snap-in certificati oppure uno strumento da riga di comando come CertUtil.

  • Guid
    Stringa GUID che identifica l'entità che registra il certificato. È consigliabile creare una stringa GUID per ogni istanza di SQL Server e utilizzare la stessa stringa GUID per tutte le registrazioni di certificati eseguite dall'istanza.

La registrazione di un certificato SSL per un socket IP:Port ha effetto su tutte le applicazioni in attesa su IP:Port. Se ad esempio, sia l'istanza di SQL Server che un'altra applicazione, come IIS, sono in attesa sullo stesso socket IP:Port (10.0.0.1:80), l'istanza di SQL Server in cui viene registrato un certificato SSL per 10.0.0.1:80 avrà effetto su IIS. IIS e l'istanza di SQL Server utilizzeranno inoltre lo stesso certificato comune. Si tratta di un limite del driver HTTP in modalità kernel (Http.sys). Quando Http.sys riceve una richiesta nel socket IP:Port 10.0.0.1:80, poiché la richiesta è crittografata non è possibile analizzare l'URL per determinare se appartiene a SQL Server o a IIS. Https.sys può inoltrare la richiesta solo dopo averla decrittografata. Non è pertanto possibile utilizzare un certificato SSL diverso per le varie applicazioni in attesa sullo stesso socket IP:Port.

Se SQL Server è in esecuzione in Windows Vista (o un'edizione equivalente di Windows Server), è necessario registrare in modo specifico il certificato per l'indirizzo IP locale (IPv4: 127.0.0.1 o IPv6: [:: 1]), nonché per l'indirizzo IP esterno del computer, per abilitare la connettività del "locahost" su SSL. In alternativa, è possibile specificare l'indirizzo non specificato (IPv4: 0.0.0.0 o IPv6: [::]) quando si registra il certificato SSL. Windows Vista è inoltre dotato di uno strumento incorporato che può essere utilizzato per gestire le registrazioni dei certificati SSL anziché utilizzare lo strumento httpcfg.exe. Il nuovo comando è il seguente:

netsh http add sslcert ipport=IP:Port certhash=Hash appid=Guid

Esempi:

netsh http add sslcert ipport=[::]:443 certhash=<hash> appid=<guid>Examples

Nell'esempio seguente viene registrato un certificato:

httpcfg set ssl /i 10.0.0.1:80 /h 2c8bfddf59a4a51a2a5b6186c22473108295624d 
/g "{2bb50d9c-7f6a-4d6f-873d-5aee7fb43290}"

Esecuzione di query sui certificati

Per visualizzare tutti i certificati registrati, utilizzare il comando seguente:

httpcfg query ssl

Per visualizzare un singolo certificato, utilizzare l'opzione /i:

httpcfg query ssl /iIP:Port

Argomenti

  • IP:Port
    Combinazione di porta e indirizzo IP per cui si sta eseguendo la query sul certificato.

Esempio

httpcfg query ssl 
httpcfg query ssl /I 10.0.0.1:80

Eliminazione di certificati SSL

Per eliminare un certificato, utilizzare l'opzione /i come indicato di seguito:

httpcfg delete ssl /iIP:Port

Argomenti

  • IP:Port
    Combinazione di porta e indirizzo IP per cui si sta eliminando il certificato.

Esempio

httpcfg delete ssl /i 10.0.0.1:80

Richiesta di certificati

È possibile ottenere i certificati richiesti da SQL Server per le comunicazioni SSL con i client basati su Internet rivolgendosi a un'autorità di certificazione, ad esempio Verisign.

Per l'esecuzione di test, è tuttavia possibile creare un certificato di prova utilizzando uno strumento denominato MakeCert.exe. MakeCert.exe fa parte di .NET Framework SDK. MakeCert.exe è inoltre disponibile in Platform SDK. Per scaricare gli SDK, visitare rispettivamente il Centro per sviluppatori Microsoft .NET Framework e l'Area download Microsoft. Tramite MakeCert.exe viene creato un certificato X.509. Viene creata una coppia di chiavi pubblica e privata per le firme digitali, che viene archiviata in un file di certificato. Tramite questo strumento, inoltre, la coppia di chiavi viene associata a un server di pubblicazione specificato e viene creato un certificato X.509 per l'associazione di un nome specificato dall'utente alla parte pubblica della coppia di chiavi.

Per creare un certificato SSL per un server che risponde a un nome host (MySQLServer), è possibile eseguire MakeCert utilizzando le opzioni seguenti:

makecert -r -pe -nCN="MySQLServer**"-eku1.3.6.1.5.5.7.3.1-ssmy-srlocalmachine**

-skyexchange-sp"Microsoft RSA SChannel Cryptographic Provider"-sy12

Opzioni della riga di comando

  • -r
    Crea un certificato autofirmato. Un certificato autofirmato è un certificato non firmato da un'autorità di certificazione. Poiché non è firmato da un'autorità di certificazione, il certificato può essere utilizzato per la crittografia richiesta in SSL ma non per l'autenticazione server.

  • -n
    Specifica il nome del server. Tale nome deve essere conforme allo standard X.500. Il metodo più semplice è specificare il nome racchiuso tra virgolette doppie, preceduto da CN=.

  • -eku
    Specifica un elenco delimitato da virgole di identificatori oggetto (OID) utilizzo chiavi avanzato nel certificato. Per SQL Server è necessario un certificato SSL valido per l'autenticazione server con OID 1.3.6.1.5.5.7.3.1 (szOID_PKIX_KP_SERVER_AUTH).

  • -ss
    Specifica l'archivio certificati in cui viene salvato il certificato creato. È consigliabile eseguire il salvataggio nell'archivio my, sebbene sia possibile utilizzare una posizione qualsiasi nell'archivio certificati.

  • -sr
    Specifica l'archivio certificati in cui si trova il certificato. La posizione può essere currentuser (posizione predefinita) o localmachine. Poiché il certificato viene creato per un servizio, è necessario salvarlo nel computer locale.

  • -sky
    Specifica il tipo di chiave del certificato. Può essere una chiave signature, exchange o un numero intero, quale 4. Per algoritmo di scambio della chiave pubblica RSA, è necessaria una chiave di scambio. Si tratta del tipo di chiave utilizzato per crittografare e decrittografare le chiavi della sessione.

  • -sp
    Specifica il nome del provider CryptoAPI. Per i certificati creati per SQL Server, è possibile impostare Microsoft RSA SChannel Cryptographic Provider.

  • -sy
    Specifica il tipo di provider CryptoAPI. Quando il provider è Microsoft RSA SChannel Cryptographic Provider, il valore è 12.

Ulteriori opzioni della riga di comando

  • -b
    Valore di data nel formato mm/gg/aaaa che specifica l'inizio del periodo di validità del certificato. Il valore predefinito corrisponde alla data di creazione del certificato.

  • -e
    Valore di data nel formato mm/gg/aaaa che specifica la fine del periodo di validità del certificato. Se non viene impostato un valore diverso, il valore predefinito è 12/31/2039 11:59:59 GMT.

Esempi

Nell'esempio seguente viene illustrata la creazione di un certificato tramite MakeCert con opzioni aggiuntive.

makecert -r -pe -n "CN= MySQLServerName" -b 01/01/2000 -e 01/01/2036 
    -eku 1.3.6.1.5.5.7.3.1 -ss my -sr localMachine -sky exchange 
    -sp "Microsoft RSA SChannel Cryptographic Provider" -sy 12

Dopo la creazione del certificato, è possibile ottenere il relativo hash dall'applicazione MMC del certificato oppure utilizzando uno strumento come CertUtil. Tramite CertUtil è possibile visualizzare il certificato appena creato.

C:\>certutil -store "my" "MySQLServerName"

================ Certificate 2 ================
Serial Number: e302d3a7a831c9884c0dd736f24825e6
Issuer: CN=MySQLServerName
Subject: CN=MySQLServerName
Signature matches Public Key
Root Certificate: Subject matches Issuer
Cert Hash(sha1): d2 2f 9a 7f 18 cb ed 13 a1 3e be e5 32 69 6c 4b ad ba b9 30
  Key Container = 956cbc46-f005-4aeb-b521-7c313f2ccd10
  Provider = Microsoft RSA SChannel Cryptographic Provider
Encryption test passed
CertUtil: -store command completed successfully.

L'hash ottenuto dai risultati eseguendo CertUtil può essere passato allo strumento Httpcfg.exe per la registrazione del certificato autofirmato.

Prima di utilizzare MakeCert per creare un certificato SSL autofirmato e registrarlo con Http.sys, verificare che nel computer sia installato IIS. IIS include una procedura guidata che semplifica la creazione dei certificati SSL. Se pertanto IIS è già installato nel computer, tramite Http.sys potrebbe essere già stato registrato un certificato SSL. In caso contrario, è possibile utilizzare la procedura guidata disponibile in IIS per creare e registrare il certificato

Poiché i certificati SSL vengono applicati in tutto il computer, non è importante che IIS venga utilizzato per registrare un certificato da utilizzare in SQL Server.

Considerazioni

  • Quando si disinstalla un'istanza di SQL Server, le associazioni tramite certificato SSL create utilizzando Httpcfg.exe verranno conservate a meno che non vengano eliminate manualmente. Poiché queste impostazioni non sono state create tramite il programma di installazione di SQL Server, non verranno rimosse da tale programma. Se, pertanto, un'istanza di SQL Server viene disinstallata, sarà necessario rimuovere anche tali associazioni.

  • Sebbene per l'utilizzo di SSL tramite HTTP con SQL Server non sia necessario IIS, quando IIS viene installato insieme a un'istanza di SQL Server, il servizio SSL HTTP rimane collegato all'utilizzo di IIS. Nel caso in cui si arresti IIS, ad esempio utilizzando net stop iisadmin al prompt dei comandi, tramite IIS viene arrestato anche il servizio SSL HTTP. Inoltre, dopo l'installazione di IIS in Windows, non è possibile avviare il servizio SSL HTTP senza avviare anche IIS (Inetinfo.exe).