配置 SSL 使用的证书

不推荐使用本机 XML Web 服务。后续版本的 Microsoft SQL Server 将删除该功能。请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。

对于安全套接字层 (SSL) 通信,HTTP 服务器必须为每个套接字(IP 地址/端口组合)注册一个证书,以便与 SSL 一起使用。必须授予证书才能进行服务器身份验证。您可以通过从证书颁发机构(如 Verisign)获得 SSL 证书来执行此操作,或者如果是为了进行测试,可以使用工具自己发布并创建证书。

证书不论是获得的还是自己发布的,都必须向服务器注册。我们建议使用 HTTP 配置实用工具 (HttpCfg.exe) 来注册、查询及删除 SSL 证书。

注册 SSL 证书

若要注册证书,请使用下面的命令:

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

参数

  • IP:Port
    为其注册证书的 IP 地址和端口组合。

  • Hash
    证书哈希。

    注意注意

    证书哈希可以从证书存储区获得。可以使用证书管理单元或命令行工具(如 CertUtil)进行查看。

  • Guid
    GUID 字符串标识注册证书的实体。最佳方法是为每个 SQL Server 实例创建一个 GUID,并将同一 GUID 用于该实例所执行的所有证书注册。

为 IP:Port 注册 SSL 证书会影响所有侦听该 IP:Port 的应用程序。例如,如果 SQL Server 实例和另一个应用程序(如 IIS)侦听同一 IP:Port (10.0.0.1:80),则为 10.0.0.1:80 注册 SSL 证书的 SQL Server 实例将影响 IIS,IIS 和该 SQL Server 实例将必须共享同一公用证书。这是内核模式 HTTP 驱动程序 (Http.sys) 的限制。当 Http.sys 收到 IP:Port 10.0.0.1:80 上的请求时,因为请求是加密的,所以它无法检查 URL 来确定请求是属于 SQL Server 还是属于 IIS。Https.sys 只有在解密请求后才可以路由该请求。因此,它不能对侦听同一 IP:Port 的其他应用程序使用不同的 SSL 证书。

如果 SQL Server 正在 Windows Vista(或等效的 Windows Server 版本)上运行,最好专门注册本地 IP 地址(IPv4:127.0.0.1 或 IPv6:[::1])的证书和计算机的外部 IP 地址,以便启用基于 SSL 的“locahost”连接。或者,您也可以在注册 SSL 证书时指定未指定的地址(IPv4:0.0.0.0 或 IPv6:[::])。此外,Windows Vista 现在提供有助于管理 SSL 证书注册的内置工具,而不是使用 httpcfg.exe 工具;此新命令如下所示:

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

例如:

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

下面的示例注册了证书:

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

查询证书

若要查看所有已注册的证书,请使用下面的命令:

httpcfg query ssl

若要查看单个证书,请使用 /i 选项:

httpcfg query ssl /iIP:Port

参数

  • IP:Port
    为其查询证书的 IP 地址和端口组合。

示例

httpcfg query ssl 
httpcfg query ssl /I 10.0.0.1:80

删除 SSL 证书

若要删除单个证书,请使用 /i 选项,如下所示:

httpcfg delete ssl /iIP:Port

参数

  • IP:Port
    为其删除证书的 IP 地址和端口组合。

示例

httpcfg delete ssl /i 10.0.0.1:80

获得证书

您可以从证书颁发机构(如 Verisign)获得 SQL Server 与基于 Internet 的客户端进行 SSL 通信所需的证书。

但是,如果是为了测试,您可以使用名为 MakeCert.exe 的工具创建一个测试证书。MakeCert.exe 是 .NET Framework SDK 的一部分。MakeCert.exe 也可从 Platform SDK 中获得。若要下载 SDK,请分别转到 Microsoft .NET Framework 开发人员中心Microsoft 下载中心。MakeCert.exe 用于创建 X.509 证书。它为数字签名创建公钥和私钥对,并将其存储在证书文件中。此工具也将密钥对与指定发布服务器相关联,创建将用户指定的名称绑定到密钥对公共部分的 X.509 证书。

若要为主机名 (MySQLServer) 对应的服务器创建 SSL 证书,可以使用下列选项执行 MakeCert

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

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

命令行开关

  • -r
    创建自我签署的证书。自我签署的证书是指那些不是由证书颁发机构签署的证书。因为它不是由证书颁发机构签署的,所以可用于 SSL 所需的加密,但不可用于服务器身份验证。

  • -n
    指定服务器名称。此名称必须符合 X.500 标准。最简单的方法是指定带有双引号且前面有 CN= 的名称。

  • -eku
    将一些以逗号分隔的增强型密钥用法对象标识符 (OID) 指定到证书中。对于 SQL Server,需要一个对具有 1.3.6.1.5.5.7.3.1 (szOID_PKIX_KP_SERVER_AUTH) OID 的服务器身份验证有效的 SSL 证书。

  • -ss
    指定保存创建的证书的证书存储区。虽然可以将创建的证书保存到证书存储区的任何位置,但我们建议将证书保存在 my 存储区中。

  • -sr
    指定证书所在的证书存储区。位置既可以是 currentuser(默认),也可以是 localmachine。因为此证书是为服务创建的,所以应将它放置在本地计算机中。

  • -sky
    指定证书密钥类型。此开关的值必须为 signatureexchange 或整数(如 4)。对于 RSA 公钥交换算法,此处要求是 exchange。这是用于加密和解密会话密钥的密钥类型。

  • -sp
    指定 CryptoAPI 提供程序名称。对于为 SQL Server 创建的证书,可以将其设置为 Microsoft RSA SChannel Cryptographic Provider

  • -sy
    指定 CryptoAPI 提供程序类型。如果提供程序是 Microsoft RSA SChannel Cryptographic Provider,则此开关的值为 12

其他命令行开关

  • -b
    以 mm/dd/yyyy 格式指定证书有效期的起始时间的日期值。默认值为证书的创建日期。

  • -e
    以 mm/dd/yyyy 格式指定证书有效期的结束时间的日期值。如果无其他设置,则默认值为 12/31/2039 11:59:59 GMT。

示例

下面的示例说明了如何使用 using MakeCert 和其他选项创建证书。

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

创建证书后,您可以从证书的 MMC 或使用工具(如 CertUtil)来获得证书哈希。使用 CertUtil,可以列出刚刚创建的证书。

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.

通过将运行 CertUtil 从结果中获得的哈希传递到 Httpcfg.exe 工具可以注册自我签署的证书。

使用 MakeCert 创建自我签署的 SSL 证书并在 Http.sys 之前注册,请检查计算机是否已安装 IIS。IIS 提供了一个指导轻松注册 SSL 证书的向导。因此,如果计算机上已安装 IIS,则 SSL 证书可能已在 Http.sys 注册。如果计算机上未安装 IIS,则可以使用 IIS 向导创建并注册证书。

因为 SSL 证书在计算机范围内有效,所以使用 IIS 注册 SQL Server 要使用的证书不是很重要。

注意事项

  • 卸载 SQL Server 实例时,除非手动删除使用 Httpcfg.exe 创建的 SSL 证书绑定,否则它们将保留。因为这些设置不是使用 SQL Server 安装程序创建的,所以它们不会随 SQL Server 一起删除。因此,如果卸载了 SQL Server 实例,也应删除此类绑定。

  • 尽管通过 HTTP 将 SSL 和 SQL Server 一起使用时不需要 IIS,但将 IIS 与 SQL Server 示例一起安装后,HTTP SSL 服务将与 IIS 使用情况相链接。例如,如果停止 IIS(如在命令提示符下使用 net stop iisadmin),IIS 也将停止 HTTP SSL 服务。此外,将 IIS 安装到 Windows 中后,在未启动 IIS (Inetinfo.exe) 的情况下,将无法启动 HTTP SSL 服务。