以编程方式管理服务器证书

可以结合使用脚本和组件对象模型 (COM) 对象 IISCertObj 以编程方式远程管理证书。可以使用 IISCertObj 执行下列任务:

本主题包括下列信息:

要了解如何获取 SSL 服务器证书,请参阅获取和安装服务器证书

IISCertObj 组件属性和方法

本节列出了在 IIS 中支持的 IISCertObj 属性和方法。

IISCertObj 属性

因为在调用某种方法时,如果该方法所需的属性不可用,该方法就会返回错误消息,所以在调用方法之前应该先设置属性。使用以下 IISCertObj 属性生成证书请求。

属性属性名属性值描述
ServerName 数据类型 字符串,只写 包含在其上执行证书操作的计算机的名称。
UserName 数据类型 字符串,只写 指定用于登录到远程计算机的用户名。如果 UserName 为空,则使用当前登录的用户的凭据。要将证书安装到远程证书存储,用户必须拥有远程计算机的管理员特权。
UserPassword 数据类型 字符串,只写 指定登录远程计算机使用的密码。
InstanceName 数据类型 字符串,只写 标识目标配置数据库实例。W3svc/1 就是一个例子。

IISCertObj 方法

Copy

Copy 方法用于在 IIS 实例之间以及计算机之间复制证书。

Copy (bAllowExport, bOverwriteExisting, DestinationServerName, DestinationServerInstance, DestinationServerUserName, DestinationServerPassword)

Copy 方法使用以下参数。

名称数据类型描述
bAllowExport 布尔型 指定导入的证书是可导出的证书 (true) 还是不能导出的证书 (false)。
bOverWriteExisting 布尔型 指定如果相同的证书已存在,是覆盖该证书 (true),还是不覆盖该证书 (false)。
DestinationServerName 字符串 标识证书将移动到的目标服务器。
DestinationServerInstance 字符串 标识证书将指向的 IIS 配置数据库实例。例如,w3svc/1。
DestinationServerUserName 字符串 目标服务器的可选用户名。如果为空,则使用当前登录的用户的用户名。
DestinationServerPassword 字符串 在使用 DestinationServerUserName 时,指定目标服务器的密码。

Export

Export 方法将证书副本导出到文件中。目标文件可能位于本地计算机或远程计算机。

Export(FileName, Password, bPrivateKey, bCertChain, bRemoveCert)

Export 方法需要以下参数。

名称数据类型描述
FileName 字符串 指定目录文件的名称。例如,c:\mydir\mycert.pfx
Password 字符串 包含用于保护文件(指定为 文件名)的密码。
bPrivateKey 布尔型 指定已导出私钥 (true) 还是未导出私钥 (false)。
bCertChain 布尔型 指定已导出证书信任链 (true) 还是未导出证书信任链 (false)。
bRemoveCert 布尔型 指定已删除证书绑定 (true) 还是未删除证书绑定 (false)。

GetCertInfo

可通过 GetCertInfo 方法获取 ServerNameInstanceName 属性所指定的计算机上安装的证书的信息。

GetCertInfo()

GetCertInfo 方法不使用参数。

Import

Import 方法将证书副本从文件导入到本地或远程计算机。

Import(bAllowExport, bOverwriteExisting, FileName, Password)

Import 方法需要以下参数。

名称数据类型描述
FileName 字符串 指定要导入的证书文件的名称。
Password 字符串 包含用于保护文件(指定为 文件名)的密码。
bAllowExport 布尔型 指定导入的证书是可导出的证书 (true) 还是不能导出的证书 (false)。
bOverwriteExisting 布尔型 指定如果相同的证书已存在,是覆盖该证书 (true),还是不覆盖该证书 (false)。

ImportToCertStore

ImportToCertStore 方法将证书副本从文件导入到本地或远程计算机上的证书存储。

ImportToCertStore(bAllowExport, bOverwriteExisting, FileName, Password)

ImportToCertStore 方法需要以下参数。

名称数据类型描述
FileName 字符串 指定要导入的证书文件的名称。
Password 字符串 包含用于保护文件(指定为 文件名)的密码。
bAllowExport 布尔型 指定导入的证书是可导出的证书 (true) 还是不能导出的证书 (false)。
bOverwriteExisting 布尔型 指定如果相同的证书已存在,是覆盖该证书 (true),还是不覆盖该证书 (false)。
BinaryVariant 变量 输入变量。

IsExportable

可使用 IsExportable 方法确定是否可以从 ServerNameInstanceName 属性指定的计算机导出证书。

IsExportable()

IsExportable 方法不使用参数。

IsInstalled

可使用 IsInstalled 方法确定是否可以在 ServerNameInstanceName 属性指定的计算机上安装证书。

IsInstalled()

IsInstalled 方法不使用参数。

Move

Move 方法用于在 IIS 实例之间以及计算机之间移动证书。

Move (bAllowExport, bOverwriteExisting, DestinationServerName, DestinationServerInstance, DestinationServerUserName, DestinationServerPassword)

Move 方法使用以下参数。

名称数据类型描述
bAllowExport 布尔型 指定导入的证书是可导出的证书 (true) 还是不能导出的证书 (false)。
bOverWriteExisting 布尔型 指定如果相同的证书已存在,是覆盖该证书 (true),还是不覆盖该证书 (false)。
DestinationServerName 字符串 标识证书将移动到的目标服务器。
DestinationServerInstance 字符串 标识证书将指向的 IIS 配置数据库实例。例如,w3svc/1。
DestinationServerUserName 字符串 目标服务器的可选用户名。如果为空,则使用当前登录的用户的用户名。
DestinationServerPassword 字符串 在使用 DestinationServerUserName 时,指定目标服务器的密码。

RemoveCert

可使用 RemoveCert 方法从证书存储中删除证书。

Copy (bRemoveFromCertStore, bPrivateKey)

RemoveCert 方法使用以下参数。

名称数据类型描述
bRemoveFromCertStore 布尔型 指定已删除证书 (true) 还是未删除证书 (false)。
bPrivateKey 布尔型 指定要删除的证书的私钥。

示例脚本

在从证书颁发机构获取 SSL 服务器证书后,要将证书副本分发到所有服务器上,需要执行以下一个或多个步骤:

在 IIS 中,如果使用 Windows Script Host (WSH) 或 Active Server Pages (ASP),则可以执行与 IISCertObj 通信的脚本以编程方式导入、存档或导出证书。

将证书导入到多台服务器上 (CertImport.vbs)

在大型站点中,通常需要使用一个 SSL 证书来完成用户到多台服务器的安全登录。相反,如果使用 MMC 将证书副本添加到每台服务器上,则速度是非常慢的。您需要的是一个脚本化的解决方案,即将同一证书的副本安装到所有目标服务器上。

将以下脚本保存为 CertImport.vbs。根据您的网络资源修改命令行语句参数。然后,使用命令行语句将证书从一台服务器上的证书存储导入到其他服务器上。

Option Explicit
Dim iiscertobj, pfxfile, pfxfilepassword, InstanceName, WebFarmServers, IISServer
Set iiscertobj = WScript.CreateObject("IIS.CertObj")
pfxfile = WScript.Arguments(0)
pfxfilepassword = WScript.Arguments(1)
InstanceName = WScript.Arguments(2)
WebFarmServers = split(WScript.Arguments(3), ",")
iiscertobj.UserName = WScript.Arguments(4)
iiscertobj.UserPassword = WScript.Arguments(5)
For Each IISServer in WebFarmServers
  iiscertobj.ServerName = IISServer
  iiscertobj.InstanceName = InstanceName
  iiscertobj.Import pfxfile, pfxfilepassword, true, true
Next

命令行语句:

Certimport.vbs cert.pfx pfxpassword w3svc/1 iisserver1,iisserver2,iisserver3 Administrator aal34290

将证书保存到中央存档中 (Save_all_certs.vbs)

可使用 IISCertObj 导出方法将服务器场上的每个证书备份存档在中央站点中。

在文本编辑器中将以下脚本保存为 Save_all_certs.vbs。根据您的网络资源修改命令行语句参数。然后,使用命令行语句将证书副本导出到中央站点。

Option Explicit
Dim iiscertobj, targetServer, targetServers, pfxbasename, pfxpassword, InstanceName 
Set iiscertobj = WScript.CreateObject("IIS.CertObj")
pfxbasename = WScript.Arguments(0) 
pfxpassword = WScript.Arguments(1) 
InstanceName = WScript.Arguments(2) 
targetServers = split(WScript.Arguments(3), ",")
iiscertobj.UserName = WScript.Arguments(4) 
iiscertobj.UserPassword = WScript.Arguments(5)
iiscertobj.InstanceName = InstanceName
For Each targetServer in targetServers 
  iiscertobj.ServerName = targetServer 
  iiscertobj.Export pfxbasename + targetServer + ".pfx", pfxpassword, true, false, false 
Next

命令行语句:

Save_all_certs.vbs C:\certbackup\ adsf-0324 w3svc/1 iisserver2,iisserver3,iisserver4 Administrator aal34290

将证书从现有服务器复制到新的服务器上 (CertCopy.vbs)

在将新的服务器添加到服务器场后,可通过下面的脚本和命令行语句使用 IISCertObjcopy 方法及将证书复制到该服务器上。

将以下脚本保存为 certcopy.vbs。根据您的网络资源修改命令行语句参数。然后,运行命令行语句。

Option Explicit
Dim iiscertobj, targetServer, targetServers, targetInstance
Set iiscertobj = WScript.CreateObject("IIS.CertObj")
iiscertobj.ServerName = WScript.Arguments(0)
iiscertobj.Instancename = WScript.Arguments(1)
targetServers = split(WScript.Arguments(2), ",")
targetInstance = WScript.Arguments(3)
iiscertobj.UserName = WScript.Arguments(4)
iiscertobj.UserPassword = WScript.Arguments(5) 
For Each targetServer in targetServers
  iiscertobj.Copy true, true, targetServer, targetInstance
Next

命令行语句:

Certcopy.vbs iisServer1 w3svc/1 iisServer2 w3svc/1 Administrator asdf-0324

© 1997-2003 Microsoft Corporation。保留所有权利