1

我是我部门内部网站的项目经理,我正在尝试为网站设置用户名/密码身份验证的替代方法。我的印象是,理想的方法是在每个授权设备上使用 SSL 客户端证书来实现这一点,但是在尝试消化了几天的信息甚至购买了一本关于 OpenSSL 的书之后,我什至不知道如何开始。

设置的要点如下:

  • 在 IIS 6 上运行的网站
  • 安装了 OpenSSL 模块的 PHP 5.2
  • 视窗服务器 2003
  • 登录设备包括 Windows XP/Windows 7 PC 和 Blackberry 设备
  • 当前安装在服务器上且连接所需的有效 CA 签名 SSL 证书

我想做的是从连接设备请求客户端证书;如果不可用,请为 LDAP 身份验证请求用户名和密码(目前正在运行)。一旦通过身份验证,我希望用户能够生成和下载客户端证书,以便在设备上安装以连接到该服务器,而无需使用用户名/密码组合。

我知道我可以使用 cookie 进行相同类型的“自动登录”,但我认为使用这种方法可以增强安全性,尽管配置更繁琐。

我希望这里的某个人可以为我指出正确的方向来开始这样的事情,或者告诉我我是否完全朝着错误的方向前进以完成这项工作。我确信我的理解存在很多差距,但是到目前为止,我读过的每个教程要么过于笼统而无用,要么跳入了一定程度的复杂性,以至于我无法理解超过几行。

提前感谢您可以分享的任何建议!

4

1 回答 1

2

我想我会把它作为我的答案,因为我越读你的问题,我就越认为这是我的答案。

我绝对不会这样做。为了允许 AES 加密的“证书”或密钥文件克服正常的身份验证过程,您需要要求一件事的信任和完整性:客户端机器/设备。

这是不可能的,您永远不应该依赖客户端机器的安全性或安全性以及您在他们的机器上拥有的数据。如果用户没有在每个站点的浏览器自己的密码数据库中设置“记住我的密码”,那么物理密码比计算机上的物理文件更难窃取。这就是为什么大多数物理密码都是通过窃取网站数据库来获取的。当然,如果您知道自己的东西,您可以信任自己的编码和散列函数来提供您拥有的最佳安全性,比客户端计算机更安全。如果客户证书被盗,就没有办法知道它是否有,

我想为了提高安全性,您可以说每个文件都应该限制在一个 IP 上,但这会破坏绕过身份验证过程的意义,因为如果您考虑一下,您的大多数用户将使用来自其 ISP 的动态分配的 IP。我知道我的 ISP 每半夜都会更改我的 IP,这意味着该文件将不再每天都有效,这意味着我每天都必须使用我的用户名和密码重新登录。

这至少是一场安全噩梦。您的用户帐户将只是等待被黑客入侵,并且只是您的身份验证过程之上不需要的膨胀软件。

但是,对于您的严格控制(如果是严格控制,即使通过大规模身份验证,个人任何外部可访问的东西都不会受到严格保护)Intranet,我将使用 PHP 生成我的证书文件,使用: http: //php.net/manual/en/函数.openssl-csr-sign.php

现在这里的关键是您将希望将该证书存储在您身边,以便您可以评估它。为此,您将需要使用一些解析功能:http : //www.php.net/manual/en/function.openssl-x509-parse.php 在您获得的客户端证书上。

但是 cURL 有自己的客户端 SSL 处理程序,请看这里:

带有 LibCUrl 的客户端证书

希望这会有所帮助,

于 2012-08-19T16:46:22.487 回答