![发放客户证书](https://linux22.com/image/605739/%E5%8F%91%E6%94%BE%E5%AE%A2%E6%88%B7%E8%AF%81%E4%B9%A6.png)
我正在构建一个 Web 应用程序,并且第一次需要考虑安全性,因为某些操作只能由注册用户执行。
当然,应用程序的这些部分都是通过 https 运行的(实际上整个应用程序都是这样),但目前只涉及服务器端证书(例如,客户端知道服务器确实是服务器)。
为了使安全性尽可能简单,我想开始使用客户端证书(以便服务器知道连接的客户端实际上是客户端)。
不过,我有点不知道如何发放/签署客户端证书。是否可以通过 https(服务器证书)在普通的类似 HMAC 的登录方案下完成此操作。例如,用户登录并收到/能够签署证书。
我正在使用 php 作为后端,并且正在研究 html5<keygen>
标签,尽管这看起来非常不安全(使用 md5)。
理想情况下,我希望能够几乎不引人注意地分发和安装客户端证书,并且时不时地刷新它们(例如它们每周过期)。
该 Web 应用程序根本不需要极高的安全性,但它运行在个人 Web 服务器上,我希望它不受感染。此外,在传输级别实施安全性对我来说似乎更安全,并且它将应用程序的安全性方面与实际应用程序代码隔离开来。
以上所有方法都是可以接受的吗?如果不是,为什么?如果是,有哪些简单的方法可以实现它。
笔记:我对 Web 应用程序的了解很少(这就是我构建 Web 应用程序的原因,这样我就可以学习),我对安全性、其协议和最佳实践的了解就更少了。事实上,我甚至还没有完全理解 SSL 的工作原理(我正在研究它!)所以请多多包涵。
答案1
客户端证书不会被用户忽视,它们通常至少需要一些交互(提供密码、允许发送证书)。安装新证书肯定需要用户参与,因此每周更改证书是不可行的。您需要期望您的用户了解客户端证书是什么以及如何使用它们。
此外,带内提供证书意味着它们的安全性仅与保护证书生成和安装的安全性一样安全,因此人们必须质疑添加证书的意义。
我并不是说你必须抛弃客户端证书作为一个选项(我希望看到它们得到更普遍的使用),只是你必须评估它们是否真的增加了安全性以及增加的安全性是否值得付出努力(带外证书分发、用户教育和努力等)。