一次CA证书服务器+IIS SSL的实验心得及总结

从一个论坛上搜集整理的: http://bbs.51cto.com/thread-16155-1-1.html

数字证书

数字证书是用于在Internet上建立人们身份和电子资产的数据文件。它们保证了安全、加密的在线通信并常常被用于保护在线交易。

----数字证书由被称为认证中心(CA)的可信赖的第三方来发放。CA认证证书持有者的身份并“签署”证书来证明证书不是伪造的或没有以任何方式篡改。

----当一个证书由CA进行数字签署时,其持有者可以使用它作为证明自己身份的电子护照。它可以向Web站点、网络或要求安全访问的个人出示。

----内嵌在证书中的身份信息包括持有者的姓名和电子邮件地址、发证CA的名称、序列号以及证书的有效或失效期。当一位用户的身份为CA所确认后,证书使用持有者的公共密钥来保护这一数据。

----一台Web服务器用来向用户浏览器证实自己真实性的证书也可以使用公共密钥。当用户打算向Web服务器发送保密信息(如用于一次在线交易信用卡号)时,用户浏览器将索取服务器数字证书中的公共密钥来证实Web站点的身份。

公共密钥加密体制的作用

----公共密钥是为数字证书提供基础的公共密钥加密体制中所使用的密钥对中的一半密钥。

----公共密钥加密体制利用对应的公共密钥和私有密钥进行加密和解密。这些密钥有着某种数字值,加密算法使用这类数字值来加密信息,使信息只能为拥有相应解密密钥的用户所读懂。

----使用数据证书的Web服务器可以利用私有密钥来解密在Internet 上发送给它的保密信息。

----Web服务器的证书由一个标识发证CA的自签署CA证书来确认有效。CA 证书被预安装在大多数主要Web浏览器中, 这些浏览器包括Microsoft Internet Explorer 和Netscape Navigator。

CA证书告诉用户当Web服务器的证书出示给浏览器时他们是否可以信任Web服务器的证书。如果Web服务器证书的有效性得到证实的话, 证书的公共密钥就被用来为使用安全套接层(SSL)技术的服务器加密信息。

----SSL安全协议可以利用数字证书在寻求安全通信的双方之间建立安全的“管道”。 多数主要Web浏览器和商用Web服务器中都使用SSL。

呼叫与握手

----如果一位购物者打算与一个采用SSL加密的Web站点建立连接的话,他的浏览器向这台Web服务器发出“客户机呼叫”信息,请求一次SSL加密会话。这台Web 服务器通过向购物者发送服务器的证书进行答复。

----购物者的浏览器将验证服务器的证书是否有效,是否由一个可信赖的CA所签署。这一确认两个实体打算建立一次安全的SSL连接的过程被称为SSL“握手”。

----为了启动这次握手,购物者的浏览器将生成一个用服务器公共密钥进行加密的特殊的一次性会话密钥,并向服务器发送这个加了密的会话密钥。服务器利用私有密钥解密收到的信息,恢复出会话密钥。

这种交换证实了Web站点的身份,保证了只有这个浏览器和这台Web服务器才拥有这个会话密钥。然后,Web服务器使用这个会话密钥向购物者发送加密的信息。

----当浏览器在一般模式下时,浏览器右下角的一个钥匙或挂锁的图标看起来是断开或打开的。当建立了SSL连接,浏览器处于安全模式时, 这把钥匙就变成完整的钥匙并且挂锁也锁上了。

如何在 Web 服务器上设置 SSL

资源:http://www.microsoft.com/china/t ... dance/secmod30.mspx


目标
本章的目标是:

• 获取 SSL 证书。

• 在 IIS 服务器上安装 SSL 证书。

• 配置虚拟目录以要求 SSL。

适用范围
本章适用于以下产品和技术:

• Microsoft Windows® XP 或 Windows 2000 Server (Service Pack 3) 以及更高版本的操作系统

• Microsoft Internet 信息服务 5.0

• Microsoft 证书服务(如果您需要生成自己的证书)


如何使用本章内容
若要学好本章内容:

• 您必须有配置 IIS 的经验。

• 如果您想生成自己的证书,则必须能够访问某个证书颁发机构 (CA),如 Microsoft 证书服务。

• 如果您不希望生成自己的证书,则必须决定将向哪个商业证书颁发机构申请 SSL 证书。大多数证书颁发机构 (CA) 会就此服务收费。

• 阅读第 4 章安全通信。其中介绍了 SSL 及其最常见的用途。

摘要
安全套接字层 (SSL) 是一套提供身份验证、保密性和数据完整性的加密技术。SSL 最常用来在 Web 浏览器和 Web 服务器之间建立安全通信通道。它也可以在客户端应用程序和 Web 服务之间使用。

为支持 SSL 通信,必须为 Web 服务器配置 SSL 证书。本章介绍如何获取 SSL 证书,以及如何配置 Microsoft® Internet 信息服务 (IIS),以便支持 Web 浏览器和其他客户端应用程序之间使用 SSL 安全地进行通信。

生成证书申请
此过程创建一个新的证书申请,此申请可发送到证书颁发机构 (CA) 进行处理。如果成功,CA 将给您发回一个包含有效证书的文件。

• 生成证书申请

1.启动 IIS Microsoft 管理控制台 (MMC) 管理单元。
2.展开 Web 服务器名,选择要安装证书的 Web 站点。
3.右键单击该 Web 站点,然后单击“属性”。
4.单击“目录安全性”选项卡。
5.单击“安全通信”中的“服务器证书”按钮,启动 Web 服务器证书向导。
注意:如果“服务器证书”不可用,可能是因为您选择了虚拟目录、目录或文件。返回第 2 步,选择 Web 站点。
6.单击“下一步”跳过欢迎对话框。
7.单击“创建一个新证书”,然后单击“下一步”。
8.该对话框有以下两个选项:
• “现在准备申请,但稍后发送”
该选项总是可用的。
• “立即将申请发送到在线证书颁发机构”
仅当 Web 服务器可以在配置为颁发 Web 服务器证书的 Windows 2000 域中访问一个或多个 Microsoft 证书服务器时,该选项才可用。在后面的申请过程中,您有机会从列表中选择将申请发送到的颁发机构。
单击“现在准备申请,但稍后发送”,然后单击“下一步”。

9.在“名称”字段中键入证书的描述性名称,在“位长”字段中键入密钥的位长,然后单击“下一步”。
向导使用当前 Web 站点名称作为默认名称。它不在证书中使用,但作为友好名称以助于管理员识别。
10.在“组织”字段中键入组织名称(例如 Contoso),在“组织单位”字段中键入组织单位(例如“销售部”),然后单击“下一步”。
注意:这些信息将放在证书申请中,因此应确保它的正确性。CA 将验证这些信息并将其放在证书中。浏览您的 Web 站点的用户需要查看这些信息,以便决定他们是否接受证书。
11.在“公用名”字段中,键入您的站点的公用名,然后单击“下一步”。
重要说明:公用名是证书最后的最重要信息之一。它是 Web 站点的 DNS 名称(即用户在浏览您的站点时键入的名称)。如果证书名称与站点名称不匹配,当用户浏览到您的站点时,将报告证书问题。
如果您的站点在 Web 上并且被命名为 www.contoso.com,这就是您应当指定的公用名。
如果您的站点是内部站点,并且用户是通过计算机名称浏览的,请输入计算机的 NetBIOS 或 DNS 名称。
12.在“国家/地区”、“州/省”和“城市/县市”等字段中输入正确的信息,然后单击“下一步”。
13.输入证书申请的文件名。
该文件包含类似下面这样的信息。

-----BEGIN NEW CERTIFICATE REQUEST-----
MIIDZjCCAs8CAQAwgYoxNjA0BgNVBAMTLW1penJvY2tsYXB0b3Aubm9ydGhhbWVy...
-----END NEW CERTIFICATE REQUEST-----

这是您的证书申请的 Base 64 编码表示形式。申请中包含输入到向导中的信息,还包括您的公钥和用您的私钥签名的信息。

将此申请文件发送到 CA。然后 CA 会使用证书申请中的公钥信息验证用您的私钥签名的信息。CA 也验证申请中提供的信息。

当您将申请提交到 CA 后,CA 将在一个文件中发回证书。然后您应当重新启动 Web 服务器证书向导。

14.单击“下一步”。该向导显示证书申请中包含的信息概要。

15.单击“下一步”,然后单击“完成”完成申请过程。
证书申请现在可以发送到 CA 进行验证和处理。当您从 CA 收到证书响应以后,可以再次使用 IIS 证书向导,在 Web 服务器上继续安装证书。


提交证书申请
此过程使用 Microsoft 证书服务提交在前面的过程中生成的证书申请。

• 提交证书申请

1.使用“记事本”打开在前面的过程中生成的证书文件,将它的整个内容复制到剪贴板。
2.启动 Internet Explorer,导航到 http://hostname/CertSrv,其中 hostname 是运行 Microsoft 证书服务的计算机的名称。
3.单击“申请一个证书”,然后单击“下一步”。
4.在“选择申请类型”页中,单击“高级申请”,然后单击“下一步”。
5.在“高级证书申请”页中,单击“使用 Base64 编码的 PKCS#10 文件提交证书申请”,然后单击“下一步”。
6.在“提交一个保存的申请”页中,单击“Base64 编码的证书申请(PKCS #10 或 #7)”文本框,按住 CTRL+V,粘贴先前复制到剪贴板上的证书申请。
7.在“证书模板”组合框中,单击“Web 服务器”。
8.单击“提交”。
9.关闭 Internet Explorer。

颁发证书
• 颁发证书

1.从“管理工具”程序组中启动“证书颁发机构”工具。

2.展开您的证书颁发机构,然后选择“挂起的申请”文件夹。

3.选择刚才提交的证书申请。

4.在“操作”菜单中,指向“所有任务”,然后单击“颁发”。

5.确认该证书显示在“颁发的证书”文件夹中,然后双击查看它。

6.在“详细信息”选项卡中,单击“复制到文件”,将证书保存为 Base-64 编码的 X.509 证书。

7.关闭证书的属性窗口。

8. 关闭“证书颁发机构”工具。

在 Web 服务器上安装证书
此过程在 Web 服务器上安装在前面的过程中颁发的证书。

• 在 Web 服务器上安装证书

1.如果 Internet 信息服务尚未运行,则启动它。

2.展开您的服务器名称,选择要安装证书的 Web 站点。

3.右键单击该 Web 站点,然后单击“属性”。

4.单击“目录安全性”选项卡。

5.单击“服务器证书”启动 Web 服务器证书向导。

6.单击“处理挂起的申请并安装证书”,然后单击“下一步”。

7.输入包含 CA 响应的文件的路径和文件名,然后单击“下一步”。

8.检查证书概述,单击“下一步”,然后单击“完成”。

现在,已在 Web 服务器上安装了证书。

将资源配置为要求 SSL 访问
此过程使用 Internet 服务管理器,将虚拟目录配置为要求 SSL 访问。您可以为特定的文件、目录或虚拟目录要求使用 SSL。客户端必须使用 HTTPS 协议访问所有这类资源。

• 将资源配置为要求 SSL 访问

1.如果 Internet 信息服务尚未运行,则启动它。

2.展开您的服务器名称和 Web 站点。(这必须是已安装证书的 Web 站点)

3.右键单击某个虚拟目录,然后单击“属性”。

4.单击“目录安全性”选项卡。

5.单击“安全通信”下的“编辑”。

6.单击“要求安全通道 (SSL)”。
现在客户端必须使用 HTTPS 浏览到此虚拟目录。

7.单击“确定”,然后再次单击“确定”关闭“属性”对话框。

8.关闭 Internet 信息服务。

在客户端计算机上安装证书颁发机构的证书

资源:http://www.microsoft.com/china/technet/security/guidance/secmod28.mspx

此过程在客户端计算机上安装 CA 所颁发的证书,并将该 CA 作为受信任的根证书颁发机构。客户端计算机必须信任该颁发证书的 CA,以便接受服务器证书,但不显示“安全警报”对话框。



如果在 Windows 域中使用 Microsoft 证书服务作为 CA

1.仅在您的 Web 服务器证书是由 Microsoft 证书服务 CA 颁发的情况下,才需执行此过程。否则,如果您有 CA 的 .cer 文件,请转到第 8 步。

2.启动 Internet Explorer 并浏览到 http://hostname/certsrv,其中 hostname 是颁发服务器证书的 Microsoft 证书服务所在计算机的名称。

3.单击“检索 CA 证书或证书吊销列表”,然后单击“下一步”。

4.单击“安装此 CA 证书路径”。

5.在“根证书存储”对话框中,单击“是”。

6.使用 HTTPS 浏览到 Web 服务。例如:https://WebServer/securemath/math.asmx

浏览器中现在应该正确显示 Web 服务测试页,而不显示“安全警报”对话框。
现在您已经在个人受信任根证书存储中安装了 CA 的证书。您必须将 CA 的证书添加到计算机的受信任根存储中,然后才能够从 ASP.NET 页成功调用 Web 服务。

7.重复第 1 步和第 2 步,单击“下载 CA 证书”,然后将其保存到本地计算机上的某个文件中。

8.现在执行其余步骤。

如果有 CA 的 .cer 证书文件

9.在任务栏上,单击“开始”,然后单击“运行”。

10.键入“mmc”,然后单击“确定”。

11.在“控制台”菜单上,单击“添加/删除管理单元”。

12.单击“添加”。

13.选择“证书”,然后单击“添加”。

14.选择“计算机帐户”,然后单击“下一步”。

15.选择“本地计算机 (运行这个控制台的计算机):”,然后单击“完成”。

16.单击“关闭”,然后单击“确定”。

17.在 MMC 管理单元的左窗格中展开“证书 (本地计算机)”。

18.展开“受信任的根证书颁发机构”。

19.右键单击“证书”,指向“所有任务”,然后单击“导入”。

20.单击“下一步”跳过“证书导入向导”的“欢迎”对话框。

21.输入 CA 的 .cer 文件的路径和文件名。

22.单击“下一步”。

23.选择“将所有的证书放入下列存储区”,然后单击“浏览”。

24.选择“显示物理存储区”。

25.在列表中展开“受信任的根证书颁发机构”,然后选择“本地计算机”。

26.依次单击“确定”、“下一步”以及“完成”。

27.单击“确定”关闭确认消息框。

28.在 MMC 管理单元中刷新“证书”文件夹的视图,确认该 CA 的证书已列出。

29.关闭 MMC 管理单元。

 

标题:实验中所遇问题如下:

(1)win2000server   CA证书服务器同时在此机器上做了IIS下挂BBS系统,IIS上开启安全通道-SSL-申请客户证书(要求客户证书),其他步骤也都完成,客户端也安装完客户端证书。可以通过证书对BBS进行访问,但每次访问时总会有如下图示信息。
解决方法:

QUOTE:
在“选项”标题下,安全项自定义中“显示混合内容”设置对于所有安全级别均设置为提示(与 Internet Explorer 以前版本中的行为相同),而且您可能会在包含安全 ( https://) 和不安全 ( http://) 内容的 Web 页上收到下面的“安全信息”消息:
This page contains both secure and nonsecure items.

Do you want to display the nonsecure items?(本页不但包含安全的内容,也包含不安全的内容。是否显示不安全的内容?)

如果“显示混合内容”设置被设置为启用,则收不到前面这一消息,而且不安全内容将可以显示。如果“显示混合内容”设置被设置为禁用,则收不到前面这一消息,而且不显示不安全内容。




(2)创建了CA证书服务器,并在IIS上启用了 SSL后,现在客户端也有相应证书,拥有客户端证书才可以打开本网站,IIS下挂了一个论坛,问题是在提交文章或发贴子时提示:您提交的数据不合法,请不要从外部提交发言。

造成的原因可能有:

QUOTE:
"您提交的数据不合法,请不要从外部提交发言。”原因可能是下列因素引起的:

1. 你使用的防火墙的安全设置过于严厉。以诺顿防火墙(Norton Internet Security)为例说明,过于严厉的防火墙安全策略会导致如下问题:

1) 由于硬性屏蔽了来路信息,导致论坛提交安全检查无法通过,在发帖等情况下提示为 未定义操作;

2) 由于误判断,将发帖时的论坛代码辅助提示判断为广告信息而不被执行~
尽管如此, Norton Internet Security 仍不失为一款强大有效的网络安全产品,如果您访问 本站论坛 存在上述类似问题,建议您修改 Norton 的默认配置以避免可能给您带来的不便,解决办法(以 Norton Internet Security 2003 中文版为例):

1) 选项 => Norton Internet Security => Web内容 => 浏览站点的信息 => 选择 "允许"(默认是"禁止")

2) 禁止广告 => 配置(在窗口右下方) => 取消"启用禁止广告"的复选框!
经过上述修改在安装有 Norton Internet Security 的机器上您将仍然可以顺畅的访问 本站论坛 及其他需要同等cookie认证的网站论坛。

2. 当通过腾讯TT等类型的浏览器使用本站功能时,可能出现此种问题,解决办法是在浏览器的“工具”->“选项”->“总是打开新窗口”一选项中不打上“√”即可。试试能否注册。

3. 通常一些低版本的游览器会出现一些游览错误,如果可能尽量将游览器升级到最新版本。以IE内核的游览器理想版本号在6.0以上。

通常国内的防火墙软件默认安全策略较少,不会存在这样的问题。但是如果存在,需要检查是否存在相关设置。如果不会设置,可以暂时禁用防火墙看能否解决问题,以锁定是否是防火墙的问题。

4. 由于您在论坛长时间无动作,程序认为你已离开论坛,将你的ID踢出论坛已登陆名单。对于这情况,请打开浏览器的cookies,或将浏览器安全级别设为默认的“中”级,即可打开cookies;

最终解决方法:

将此BBS中代码

QUOTE:
Rem 判断发言是否来自外部
        Public Function ChkPost()
                Dim server_v1,server_v2
                Chkpost=False
                server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
                server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
                If Mid(server_v1,8,len(server_v2))=server_v2 Then
                        Chkpost=True
                End If
        End Function

改为:

QUOTE:
Public Function ChkPost()
Chkpost=True
End Function


你可能感兴趣的:(开发技术)