我是部门内部网站的项目经理,我正在尝试为网站设置用户名/密码身份验证的替代方案。我的印象是,理想的方法是在每个授权设备上使用SSL客户端证书来实现这一点,但在尝试消化了几天的信息甚至在OpenSSL上购买书籍后,我对如何开始感到迷茫。
设置的要点如下:
我想做的是从连接设备请求客户端证书;如果不可用,请求LDAP身份验证的用户名和密码(这当前有效)。经过身份验证后,我希望用户能够生成并下载客户端证书,以便在设备上安装以连接到此服务器,而无需使用用户名/密码组合。
我知道我可以做同样的"自动登录"使用cookie,但我认为使用这种方法可以增强安全性,尽管配置更麻烦。
我希望周围的人可以指出我正确的方向来开始这样的事情,或者告诉我,我是否完全朝着错误的方向前进。我确信我的理解存在很多空白,但到目前为止我读过的每一个教程要么过于通用而无法发挥作用,要么在我已经完成的过程中陷入一定程度的复杂性在我能够获得超过几行之前,我的头脑。
提前感谢你们可以分享的任何建议!
答案 0 :(得分:2)
我以为我会把这个作为我的答案,因为我越是阅读你的问题,我认为这就是我的答案。
我绝对不会这样做。为了允许AES加密的“证书”或密钥文件克服正常的身份验证过程,您需要一件事的信任和完整性:客户机/设备。
这是不可能的,您不应该依赖客户端计算机的安全性或安全性以及您在计算机上拥有的数据。如果用户没有在每个站点的浏览器自己的密码数据库中设置“记住我的密码”,则物理密码比计算机上的物理文件更难窃取。这就是为什么大多数物理密码都是通过窃取网站数据库来获取的。当然,为了让您了解自己的东西,您可以信任自己的编码和散列函数,以提供最佳的安全性,比客户端计算机更多。如果客户证书被盗,那么就没有办法知道它是否有,我同意密码相同,但正如我上面所说,密码更难以获得,甚至当你拥有公司数据库时如果正确完成,那么破解哈希仍然要困难得多。
我想提高安全性,你可以说每个文件都应该限制在一个IP但是这样就无法绕过auth进程,因为如果你考虑一下,你的大多数用户都将使用动态分配的IP他们的ISP。我知道我的ISP每晚都会更改我的IP,这意味着这个文件每天都不再有效,这意味着我每天都要用我的用户名和密码重新登录。
这至少是一场安全噩梦。您的用户帐户只是等待被黑客入侵,只是您的身份验证过程中不需要的膨胀软件。
然而,对于你的严格控制(如果严格控制,个人任何外部可访问,即使通过大规模身份验证永远不会严格保护)内联网我会使用PHP生成我的证书文件使用:http://php.net/manual/en/function.openssl-csr-sign.php。
现在,关键是您需要将该证书存储在您身边,以便对其进行评估。为此,您需要在客户端证书上使用一些解析函数:http://www.php.net/manual/en/function.openssl-x509-parse.php。
但是cURL有自己的客户端SSL处理程序,请看这里:
Client Certificates with LibCUrl
这有望提供帮助,