[编者注:本文介绍了如何为Domino 4.6和4.6.1设置SSL客户机认证。]

互联网上最新的行业流行词是SSL。 但是SSL真正需要提供什么?

安全套接字层(SSL)是一种安全协议,可以:

  • 加密通过网络发送的信息。
  • 验证发送给收件人的邮件是否已被篡改。
  • 验证服务器身份以防止服务器欺骗。
  • 使用SSL 3.0验证客户端身份。

有关这些SSL概念的介绍,请参见Hugo Curbelo和Russell Lipton的文章“ SSL:不再仅用于商业用途 ”。 另外,查看Lotus Internet Security Zone和Netscape的SSL信息

本文的重点是最后一项,客户端身份验证。 本文将简要介绍使用SSL进行客户端身份验证,详细介绍使用客户端身份验证的好处,解释何时不需要客户端身份验证,并概述在服务器上设置客户端身份验证所涉及的步骤。

什么是客户端身份验证?

客户端身份验证是一个很不错的功能,它使您可以通过交换客户端证书来认证正在访问服务器的用户-这意味着当Internet用户访问数据库时,不再在数据库的用户活动日志中出现“匿名”条目。 而且,客户证书由外部证书颁发机构(CA)(例如VeriSign)或您作为内部CA进行担保,因此您可以放心,证书代表的人就是您期望的人。 如果您不熟悉CA或受信任的根,请阅读文章“ 信任自己:成为自己的证书颁发机构”

在4.6.1版本中,使用客户端身份验证比以前容易得多。 现在,您可以使用Notes中的证书颁发机构应用程序来颁发客户端证书和服务器证书。 您不能使用4.6版发行客户端证书; 但是,您可以从外部CA获取客户端证书,并使用客户端证书对访问Domino服务器的用户进行身份验证。

有关客户端身份验证的注意事项

客户端身份验证需要来自CA的x.509格式的客户端证书。 x.509格式是SSL证书的行业标准格式。 在4.6.1中,Notes使用此格式创建客户机证书。 使用标准格式可确保Domino和其他应用程序可以轻松交换证书。

该证书除了包含唯一的私钥-公钥对之外,还包含有关用户的信息。 对于Netscape用户,客户端证书存储在服务器计算机上的证书数据库中。 对于Microsoft Internet Explorer用户,客户端证书存储在注册表中。 为了验证用户,客户端访问的服务器上的公共通讯簿还必须包含用户的公共**。

当服务器通过网络进行SSL握手时,服务器请求客户端证书时,便会进行客户端身份验证。 要记住的一件事是服务器控制是否进行客户端身份验证。 客户不能要求进行身份验证。

像服务器证书一样,可以使用不同的类别来颁发客户端证书。 这些类指示调查的数量,通常是带宽确定过程(例如与客户端的面对面联系),用于确定请求证书的人员的身份。 当您的用户从外部CA接收证书时,类很重要,因为您要确保CA在颁发证书时采取了最大的预防措施。 当由内部CA颁发证书时,证书的类别次要程度较低,因为通常您将使用已建立的过程来确保用户身份。

如果您熟悉Notes标识,那么您将很快看到Notes标识与客户机证书设计之间的相似之处。 这里有一些相似之处:

  • Notes ID是用户的唯一标识符,其中包含该人的公钥和私钥对。 公共**还存在于该用户的“个人”文档中的“公共通讯簿”中。 像Notes ID一样,客户端证书同时具有公共**和私有**,并且公共**存在于公共地址簿中。
  • 当您想与Notes ID上没有盖章的组织进行通信时,您可以请求交叉证书并将其合并到Notes ID中。 使用客户端证书,您可以将另一个组织的CA证书作为受信任的根合并到客户端证书中。

Notes标识和客户机证书之间也存在一些主要区别:

  • Notes标识存储在硬盘驱动器上的二进制文件中。 客户端证书存储在浏览器中。 因此,您不能将客户端证书从一台计算机移动到另一台计算机。
  • 这应该不足为奇,但是值得一提:您不能将客户机证书用于Notes RPC事务,例如复制。

客户证书:内部

您可以考虑以下客户证书:

图1.客户端证书图
ssl 客户端证书验证_SSL客户端身份验证:这是信任的问题
  • 证书信息部分包含有关SSL版本号,证书的***以及其他标识此证书的信息。
  • CA名称是颁发客户端证书的CA的名称。
  • 有效期是证书颁发的日期和证书的到期日期。
  • 客户端名称是您在请求证书时指定的名称。 这是一个分层名称,例如,Joann Spera / Acme / Lotus / US。 如果您已经使用Notes注册,则客户端名称是“个人”文档中显示的通用名称。
  • 公钥和私钥对是在您将请求发送到CA时生成的,并用于网络上的客户端标识和加密。 您可以选择公钥和私钥的大小。 但是,如果要创建国际**对,则不能做出此选择-唯一的选择是512位。 **对大小指示安全性的强度。 生成**对时使用的大小越大,安全性越强。
    不要将**对的大小与协商的会话**混淆。 **对是唯一标识客户端的公钥和私钥组合。 协商的会话**是在服务器和客户端之间启动SSL会话时创建的加***。 如果您使用的是在北美获得许可的软件,则会话**最多可以使用128位。 如果站点使用VeriSign全局ID,则4.6.1版还允许与国际站点进行通信的128位加密。
  • 根据所使用的x.509证书的版本,您的证书可能包含其他信息和扩展名。
  • 当您将CA合并为受信任的根时,会将CA的数字签名添加到客户端证书中。 您可以将多个数字签名附加到单个证书上,具体取决于合并的受信任根的数量。

客户端认证:大赢家

如前所述,您可以使用客户端身份验证来识别和控制正在访问服务器的用户的访问。 这是一个简单的概念,具有令人兴奋的机会。

您可以基于用户名设置对数据库的特定访问权限,而不是为所有匿名用户设置访问权限。 例如,如果您希望Alan Jones拥有对数据库的“编辑者”访问权限,而所有其他Internet用户都具有“读者”访问权限,则可以将Alan的名称添加到具有“编辑者”访问权限的ACL中,并向具有“读者”访问权限的ACL中添加一个匿名条目。 如果没有客户端身份验证,则所有匿名用户只能具有相同级别的数据库访问权限。 客户端身份验证消除了此限制,并允许您单独指定访问权限。

使用客户端身份验证的另一种方法是设置配置文件,该配置文件根据用户名执行计算。 例如,当特定用户打开数据库时,请使用配置文件中存储的用户设置来更改数据库的显示。

识别用户不仅可以在数据库ACL,配置文件和公式中使用,而且还可以在设计访问列表(例如视图,表单和阅读器字段)中使用。

所有这些都与消息完整性,服务器身份验证和网络加密捆绑在一起,这为使用客户端身份验证奠定了坚实的基础。

您可能想知道是否可以将SSL服务器认证与Domino基本密码认证一起使用,以执行与SSL客户端认证相同的功能。 如果您不熟悉Domino基本密码认证,那么它是一种安全机制,要求用户在访问服务器时输入名称和密码。 如果启用了SSL服务器身份验证,则在通过网络发送时,还将使用SSL对名称和密码进行加密。

客户端认证与Domino密码认证的服务器认证有很大的不同。 他们的比较方式如下:

图2.客户端和服务器身份验证比较表
ssl 客户端证书验证_SSL客户端身份验证:这是信任的问题

根据您的组织,您可能会从某些似乎缺少功能的客户端身份验证中受益。 例如,如果您的用户不断忘记或丢失密码,那么不必输入名称和密码这一事实可能是有益的。 另外,通过不允许客户端证书移动到另一台计算机,您可以进一步保护数据,因为黑客必须具有对计算机的显式访问权才能冒充用户。

当您可能不需要客户端身份验证时

客户端身份验证可能并不是每个人的安全解决方案。 在致力于在组织中使用客户端身份验证之前,请考虑以下事项:

  • 您是否需要收集有关访问服务器的用户的信息或根据用户身份控制对数据库的访问? 如果没有,请不要理会客户端身份验证。 如果设置服务器身份验证,则传输的数据仍然受到保护,并且服务器身份已针对用户验证。
  • 您和您访问服务器的用户都必须执行步骤来设置客户端身份验证。 如果您有一个希望用户轻松访问的网站,但上面的项目符号不适用,那么您可能不希望客户端身份验证。 如果您要求用户在访问之前获得客户端证书,则用户可能会灰心并离开您的站点。
  • 如果组织要求客户端必须使用多台计算机,并且您不想为每台计算机上的用户设置客户端认证,那么请使用SSL服务器认证和Domino基本密码认证。 这使用户可以标识自己,而无需每次访问服务器时都使用同一台计算机。

内部和外部CA客户端证书

如果您使用的是4.6版,那么您的选择很容易:您必须从外部CA获取客户端证书,因为4.6版证书颁发机构应用程序不允许您创建客户端证书。

如果使用版本4.6.1,则可以选择从内部或外部CA获取客户端证书。 请记住,即使您使用内部CA设置服务器,您仍然可以从外部CA获取客户端证书并将其与这些服务器一起使用。 Domino遵守x.509标准,该标准使内部和外部CA的证书可以无缝地协同工作。

在大多数情况下,如果您的组织中已经建立了内部CA,那么您将希望使用内部CA颁发客户端证书。 外部CA收取新证书和年度更新的费用,因此,为避免这些费用,请使用内部CA。 而且,通过4.6.1中新的简化的证书颁发机构应用程序,可以轻松地将自己设置为证书颁发机构,并获取并请求客户证书。

即使您的用户从外部CA获取证书,您和您的用户仍将需要使用证书颁发机构应用程序来设置客户端身份验证。 CA使用该应用程序将客户端公用**添加到公用通讯簿。 如果服务器证书是从内部CA颁发的,则客户端可以使用该应用程序将服务器CA的证书合并到其客户端证书中。

客户端身份验证:步骤

设置客户端身份验证涉及客户端和CA。 以下步骤概述了如何在Domino 4.6和4.6.1上设置客户机认证。 然后,您可以转到侧栏文章以详细查看步骤。 请注意,无论您是针对4.6还是4.6.1设置客户端身份验证,其中某些步骤都是相同的。

注意:在开始之前,请确保已将服务器设置为“证书颁发机构”服务器。 (有关如何将服务器设置为CA的信息,请参阅文章“ 信任自己:成为自己的证书颁发机构” 。)

设置Domino 4.6.1的客户机认证:概述

这是为Domino 4.6.1设置SSL客户机认证所涉及的步骤的概述。

  1. 将个人文档添加到公共通讯簿。 如果用户还没有个人文档,则CA需要为其添加一个个人文档到公共通讯簿中。 Notes将客户机公共**存储在“个人”文档中。
  2. 申请客户证书。 客户端通过使用浏览器访问证书颁发机构应用程序来填写对证书的请求。
  3. 将服务器的CA证书合并为受信任的根。 客户端必须具有要访问的服务器的受信任的根证书。
  4. 批准请求,然后将公共**添加到“公共通讯簿”中的“个人”文档中。 CA使用证书颁发机构应用程序来批准在上面的步骤2中发送给他们的客户端证书请求。 然后,CA将客户的公钥添加到“个人”文档中。
  5. 合并批准的证书。 CA批准证书后,客户端会将证书合并到浏览器软件中。
  6. 配置服务器文档以进行客户端身份验证。 CA必须在服务器上启用SSL和客户机认证,以便Domino在SSL握手期间请求客户机证书。

有关这些步骤的更多详细信息,请参见侧栏文章“ 为Domino 4.6.1设置客户机认证 ”。

设置Domino 4.6的客户机认证:概述

这是为Domino 4.6设置SSL客户机认证所涉及的步骤的概述。

  1. 将个人文档添加到公共通讯簿。 如果用户还没有个人文档,则CA需要为其添加一个个人文档到公共通讯簿中。 Notes将客户机公共**存储在“个人”文档中。
  2. 申请客户证书。 由于4.6版不允许您从证书颁发机构应用程序颁发客户端证书,因此客户端从外部CA的网站请求证书。 获得证书后,客户端提交一个请求,要求将公共**添加到“公共通讯簿”中的“个人”文档中。
  3. 将服务器的CA证书合并为受信任的根。 客户端必须具有要访问的服务器的受信任的根证书。
  4. 将公用**添加到公用地址簿中。 CA批准客户端在步骤2中发送的将公用**添加到公用通讯簿的请求。
  5. 配置服务器文档以进行客户端身份验证。 CA必须在服务器上启用SSL和客户机认证,以便Domino在SSL握手期间请求客户机证书。

有关这些步骤的更多详细信息,请参见侧栏文章“ 为Domino 4.6设置客户机认证 ”。

测试您的设置

请尝试以下操作,以确保正确设置了客户端身份验证:

  • 更改服务器上数据库的ACL,并为匿名用户授予访问权限,并为读者授予您向其颁发证书的客户端的访问权限。
  • 使用浏览器在客户端计算机上输入https:// name_of_server / database_name

如果未提示您输入名称和密码,并且您可以进入数据库,则客户端身份验证正在运行。 您可以在“数据库”属性中查看“用户活动”日志,并确保显示客户端名称。

奖金锻炼

在4.6.1中,您可以设置系统,以便当用户访问服务器时Domino可以搜索多个公用地址簿。 使用此功能,您可以在服务器上包括多个公用地址簿(例如,一个Notes用户,Internet用户以及Notes和Internet用户的公用地址簿),并且Domino会自动搜索地址簿,直到找到用户的证书为止。

尝试执行此任务之前,您必须了解目录服务功能。

  1. 设置目录服务
  2. 打开主通讯簿。
  3. 打开要搜索客户端证书的每个域的目录服务文档。
  4. 在命名规则部分中,在“信任”字段中为要添加新客户端证书或客户端通过服务器进行身份验证时要搜索的那些命名层次结构选择“是”。
  5. 保存目录服务文档。

翻译自: https://www.ibm.com/developerworks/lotus/library/ls-SSL_client_authentication/index.html

相关文章: