博客里面有一些内容是目前用来自己做一些记录,并不想广为开放。之前博客是放在Github Pages上的,这样是没法自己定制一些认证的。所以这次我将博客部署到了自己的服务器上,使用Nginx来作为Web服务器,这样可以做一些简单的定制。
目前我为了进一步增强网站的安全性,用node.js实现了一个更加安全灵活的的认证系统。
1 Nginx 配置
我使用了HTTP Basic Authentication来保护特定域名下的内容。这里的教程出自官方文档。以下的教程内容在Ubuntu 16.04上验证通过。
1.1 创建密码文件
这里我们使用一些密码文件生成工具来创建用户名-密码文件。
- 确保
apache2-utils
(Debian, Ubuntu)或者httpd-tools
(RHEL, CentOS, Oracle Linux)安装了。 - 使用下面的命令创建密码文件,并添加第一个用户:
1 | sudo htpasswd -c /etc/apache2/.htpasswd user1 |
随后需要以交互的方式输入密码。
- 需要添加更多的用户时,省略
-c
,输入
1 | sudo htpasswd /etc/apache2/.htpasswd user2 |
- 输出文件
/etc/apache2/.htpasswd
的文件内容我们可以看到用户名和经过加密的密码
1 | cat /etc/apache2/.htpasswd |
1.2 配置Nginx
以下是我们的配置:
1 |
|
其中auth_basic
是访问用户在被要求输入密码时会看到的提示内容:
2 关于HTTP Basic Authentication
这里选择HTTP基本认证是因为这个方法足够简单,而我需要保护的内容的重要性也不是很高,如果有黑客大牛破解了也就破解了。
HTTP基本认证是通过HTTP协议的头部字段来传递认证信息的。认证内容只使用了base64进行编码,而HTTP协议是明文传输的,因此很容易被破解。不过如果网站使用https协议,可以提供一定的机密性。
另一个问题是现代浏览器会缓存认证信息,服务器端没有强制用户下线的方法,这也是一个安全上的漏洞。
更多的信息参考维基,说的比较清楚。