在运行 IIS 的计算机上配置中间证书以进行服务器身份验证

在运行 IIS 的计算机上配置中间证书以进行服务器身份验证

前言

我们经常在安装和部署SSL证书的时候,需要一同安装中间证书。中间证书到底是什么?为什么必须要安装?为什么有时候,没有中间证书,我的IE也能正常访问HTTPS?为什么其他浏览器都OK了,但安卓手机就是不行了!

当客户端计算机尝试建立与 IIS Web 服务器的经过服务器身份验证的安全套接字层(SSL)连接时,将在客户端计算机上验证服务器证书链。 若要成功完成此证书验证,必须在服务器上正确配置服务器证书链中的中间证书。 如果这些证书配置不正确,服务器身份验证可能会失败。 它还适用于使用 SSL/传输层安全性(TLS)进行身份验证的任何程序。

作为证书路径发现的一部分,中间证书必须位于内部,以生成到受信任的根证书的证书路径。 中间证书是一种可用于确定证书是否最终由有效的根证书颁发机构(CA)颁发的证书。 可以从缓存或客户端计算机上的证书存储中获取这些证书。 服务器还可以向客户端计算机提供信息。

中间证书是什么

中间证书,其实也叫中间CA(中间证书颁发机构,Intermediate certificate authority, Intermedia CA),对应的是根证书颁发机构(Root certificate authority ,Root CA)。为了验证证书是否可信,必须确保证书的颁发机构在设备的可信CA中。如果证书不是由可信CA签发,则会检查颁发这个CA证书的上层CA证书是否是可信CA,客户端将重复这个步骤,直到证明找到了可信CA(将允许建立可信连接)或者证明没有可信CA(将提示错误)。

为了构建信任链,每个证书都包括字段:“使用者”和“颁发者”。 中间CA将在这两个字段中显示不同的信息,显示设备如何获得下一个CA证书,重复检查是否是可信CA。

根证书,必然是一个自签名的证书,“使用者”和“颁发者”都是相同的,所以不会进一步向下检查,如果根CA不是可信CA,则将不允许建立可信连接,并提示错误。

例如:一个服务器证书 domain.com,是由Intermedia CA签发,而Intermedia CA的颁发者Root CA在WEB浏览器可信CA列表中,则证书的信任链如下:

证书 1 - 使用者:domain.com;颁发者:Intermedia CA

证书 2 - 使用者:Intermedia CA;颁发者: Root CA

证书 3 - 使用者:Root CA ; 办法和: Root CA

当Web浏览器验证到证书3:Root CA时,发现是一个可信CA,则完成验证,允许建立可信连接。当然有些情况下,Intermedia CA也在可信CA列表中,这个时候,就可以直接完成验证,建立可信连接。

为何需要中间证书

  • 保护根证书。如果直接采用根证书签发证书,一旦发生根证书泄露,将造成极大的安全问题。所以目前根证书都要求离线保存,如果需要用根证书签名,则必须通过人手工方式,直接用根证书在线签发证书是不允许的。
  • 区分不同类型的产品。针对DV,OV,EV等不同类型,不同安全级别的证书,CA会采用不同的根证书,一来便于区分,二来一旦出现问题,也便于区别处理,降低影响。中间CA证书一般都是支持在线签发证书的。
  • 交叉验证。为了获得更好的兼容性,支持一些很古老的浏览器,有些根证书本身,也会被另外一个很古老的根证书签名,这样根据浏览器的版本,可能会看到三层或者是四层的证书链结构,如果能看到四层的证书链结构,则说明浏览器的版本很老,只能通过最早的根证书来识别。

要获得中间证书,一般有两种方式:第一种、由客户端自动下载中间证书;第二种、由服务器推送中间证书。以下分别讨论。

客户端自动下载中间证书

一张标准的证书,都会包含自己的颁发者名称,以及颁发者机构访问信息: Authority Info Access,其中就会有颁发者CA证书的下载地址。

 在运行 IIS 的计算机上配置中间证书以进行服务器身份验证

通过这个URL,我们可以获得这个证书的颁发者证书,即中间证书。Windows、IOS、MAC都支持这种证书获取方式,但Android不支持这种方式,所以,如果我们仅依靠这种方式来获得中间证书,就无法在Android系统上建立可信连接。

除了操作系统支持外,还有一个很重要的因素,就是客户端可以正常访问公网。如果客户端本身在一个封闭的网络环境内,无法访问公网下载中间证书,就会造成失败,无法建立可信连接。

此外,有些CA的中间证书下载地址因为种种原因被“墙”掉了,也会造成我们无法获得中间证书,进而无法建立可信链接。

虽然自动下载中间证书的机制如此不靠谱,但在有些应用中,这却是唯一有效的机制,譬如邮件签名证书,由于我们发送邮件时,无法携带颁发邮件证书的中间证书,往往只能依靠客户端自己去下载中间证书,一旦这个中间证书的URL无法访问(被“墙”掉)就会造成验证失败。

 服务器推送中间证书

服务器推送中间证书,就是将中间证书,预先部署在服务器上,服务器在发送证书的同时,将中间证书一起发给客户端。我们部署证书,首先就要找到颁发服务器证书的中间证书,可以用中间证书下载工具 。 

如果我们在服务器上不主动推送中间证书,可能会造成的问题

  • Android手机无法自动下载中间证书,造成验证出错,提示证书不可信,无法建立可信连接。
  • Java客户端无法自动下载中间证书,验证出错,可信连接失败。
  • 内网电脑,在禁止公网的情况下,无法自动下载中间证书,验证出错,可信连接失败。

虽然我们不部署中间证书,在大多数情况,我们依然可以建立可信的HTTPS连接,但为了避免以上这些情况,我们必须在服务器上部署中间证书。

所以,为了确保我们在各种环境下都能建立可信的HTTPS连接,我们应该尽量做到以下几点:

1、必须在服务器上部署正确的中间证书,以确保各类浏览器都能获得完整的证书链,完成验证。

2、选择可靠的SSL服务商,有些小的CA机构,因为各种原因,造成他们的中间证书下载URL被禁止访问,即使我们在服务器上部署了中间证书,但也可能存在某种不可测的风险,这是我们应该尽力避免的。

3、中间证书往往定期会更新,所以在证书续费或者重新签发后,需要检查是否更换过中间证书。

影响

客户端计算机无法连接到运行 IIS 的服务器。 出现这种情况的原因是,客户端计算机无法对没有正确配置的中间证书的服务器进行身份验证。

一般来说,直接在iis利用导入导出证书的功能或者mmc导入ssl证书后,无须考虑中间证书,貌似大多数情况中间证书也会一同识别到中级证书颁发机构里。

但是我碰上的是多台服务器导入同一ssl证书时,操作系统是云中心统一安装的。出现其中一两台服务器绑定证书无法绑定, 443端口绑定证书会弹出“windows并没有足够信息验证该证书…”错误提示,无法进行证书绑定。

 

配置中间证书

打开 "证书" "Microsoft 管理控制台" (MMC)管理单元。 若要执行此操作,请执行以下步骤:

在命令提示符处,键入Mmc.exe。

如果没有以内置管理员身份运行该程序,则系统将提示您提供运行该程序的权限。 在 " Windows 安全性" 对话框中,单击 "允许"。

在 "文件" 菜单上,选择 "添加/删除管理单元"。

在 "添加或删除管理单元" 对话框中,在 "可用的管理单元" 列表中选择 "证书" 管理单元,选择 "添加",然后选择 "确定"。

在 "证书管理单元" 对话框中,选择 "计算机帐户",然后选择 "下一步"。

在 "选择计算机" 对话框中,选择 "完成"。

在 "添加或删除管理单元" 对话框中,选择 "确定"。

若要添加中间证书,请按照以下步骤操作:

在 "证书" MMC 管理单元中,展开 "证书",右键单击 "中间证书颁发机构",指向 "所有任务",然后选择 "导入"。

在 "证书导入向导" 中,选择 "下一步"。

在 "要导入的文件" 页上,在 "文件名" 框中键入要导入的证书的文件名,然后选择 "下一步"。

选择 "下一步",然后完成证书导入向导。

 

看到这里,觉得不就是利用mmc导入ssl证书的方法吗?但是注意的是这个是帮助导入中间证书的,前面是已经导入ssl证书了,再重新导入一遍到中间证书里,这个时候中间证书列表项就会出现我们ssl证书所需要的中间证书了。