我能想到的唯一解决方案是颁发客户端证书,并在您的应用程序中使用证书身份验证。
管理证书
要管理证书,您需要实施 PKI,这需要:
- 获取颁发证书所需的证书颁发机构(可以是公共 CA,也可以使用自签名证书)
- 使用 CA 为您的 Web 服务器颁发证书
- 将您的应用程序配置为通过 HTTPS 运行,并需要证书身份验证
- 为您的用户颁发证书并将其安装在他们的浏览器中
确保用户无法将证书移动到其他计算机
薄弱环节是最后一个。您必须注意如何安装以及如何颁发证书。
在用户浏览器上安装证书
在浏览器中安装证书。你可以:
- 创建证书文件,用于在浏览器中导入证书
- 使用 PKI 基础设施(证书服务器),允许通过使用浏览器访问页面来请求证书,并且在证书颁发后(即其请求被接受),需要使用相同的浏览器在其中安装证书。
注意:在这两种情况下,您都必须接受请求并颁发证书或拒绝它。证书不会自动颁发
第一个选项有一个问题:如果您将证书发送给您的用户,他将能够在任何计算机上安装它任意次数。要解决此问题,您需要访问用户的计算机,复制文件,安装它,然后删除它。第二种选择解决了这个问题。
第二种选择更安全。但有足够知识的用户仍然可以在此过程中恢复服务器颁发的文件,并将证书安装在不同的位置。
使私钥不可导出
另一个需要考虑的非常重要的一点是,当您颁发证书时,通常有一个选项允许其私钥可导出。如果设置此选项,用户可以从安装它的浏览器导出 PK,并将其安装在其他地方。显然你想避免这种情况。因此,禁用此选项。
使用此选项,用户仍然可以导出证书,但没有其私钥,因此无法将其安装在其他地方。
设置 PKI
我没有提供有关如何设置 PKI 的更多详细信息,因为它很大程度上取决于基础设施(操作系统和版本)。如果您想了解有关证书和 PKI 的更多信息维基百科条目“X.509” http://en.wikipedia.org/wiki/X.509 and PKI 的维基百科条目 http://en.wikipedia.org/wiki/Public_key_infrastructure。然后,您可以查找有关在特定基础设施 (OS) 中设置 PKI 的其他信息。
本系统的安全性
您可以放心,这个系统确实安全:例如,在我的国家,您可以通过这种方式识别自己的身份,以进行很多“官方”的事情,例如申报和纳税。
吊销证书
而且,如果您想知道如果您想拒绝已拥有证书的用户的访问会发生什么。答案是,您可以随时撤销证书,这样服务器就不会允许您的用户使用其证书进行身份验证,因为它已被撤销。
用户和机器安全
另一件让您担心的事情是其他用户使用同一台机器并登录到您的应用程序。由于以下原因,它比看起来更难:
- 仅当您使用安装该证书的同一用户登录计算机时,该证书才可用
- 安装证书时,您可以让操作系统在有人想要使用该证书时请求密码
- you can make your app to have double authorization:
- 首先,证书授权(这实际上是由IIS本身处理的)
- 其次,要求提供用户名和密码(或使用证书的用户名,并要求提供与用户关联的附加密码)
编辑:肮脏的解决方案,以及所有解决方案中的女王evercookie,它将数据存储在 12 个不同的可想象和不可想象的地方
我见过很多答案,建议使用一种“神奇的方式”来识别用户的机器,而用户不知道并接受它,或者可能会被某些用户操作破坏。这些解决方案不稳定,甚至可能不合法。此外,所解释的解决方案都不是可靠的或易于实施的,但我将在我的回答结束时向您提供解决方案。但在此之前,请允许我解释一下为什么我更喜欢证书解决方案。
安装已颁发的证书不会对用户隐藏,并且除非用户故意删除证书,否则无法破坏该证书。用户可以被告知他需要证书才能访问应用程序,因此您既不会作弊,也不会“变魔术”来识别他的机器。这是一个干净、受支持且有文档记录的解决方案。此外,证书不能被破解或黑客攻击(严格意义上来说,一切都可以被破解或黑客攻击,但这太难破解了)。除此之外,同一个证书可以由所有浏览器共享,因为它不是安装在浏览器中,而是安装在计算机的证书存储中。因此,即使用户使用不同的浏览器打开应用程序,证书仍然存在。并且很容易检查身份验证问题是否是缺少证书(或与之相关的东西)。
但是,如果您仍然希望实现一种无需用户批准即可识别用户计算机的解决方案,或者无需解释其工作原理,则可以使用“supercookies”。如果你用谷歌搜索 thister,你会发现很多地方都利用了闪存。甚至Flash + HTML5 存储。或者它甚至可以使用许多其他位置来存储所需的信息。但你会发现这种技术并不受欢迎。并且可以对抗低点并让你陷入困境。不过,话虽如此,如果你仍然想做这种“肮脏”的事情,你可以使用evercookie。它是用 JavaScript 实现的,您可以从此链接查看信息并下载代码:
- http://samy.pl/evercookie/ http://samy.pl/evercookie/
免责声明:如果你使用这个邪恶的东西并陷入某种麻烦,请不要怪罪我!我告诉你了!