带你深入了解nginx基本登录认证:使用openssl生成密码

openssl passwd 手动生成密码

引言:在Linux系统中我们要向手动生成一个密码可以采用opensll passwd来生成一个密码作为用户账号的密码。Linux系统中的密码存放在/etc/shadow文件中,并且是以加密的方式存放的,根据加密方式的不同,所产生的加密后的密码的位数也不同。

选项说明:

  • -crypt:UNIX标准加密算法,此为默认算法。如果加盐(-salt)算密码,只取盐的前2位,2位后面的所有字符都忽略。
  • -1(数字):基于MD5的算法代号。
  • -apr1(数字):apache中使用的备选md5算法代号,不能和”-1”选项一起使用,因为apr1本身就默认了md5。htpasswd工具生成的身份验证密码就是此方法。
  • -salt:加密时加点盐,可以增加算法的复杂度。但加了盐会有副作用:盐相同,密码也相同,则加密的结果将一样。
  • -in file:从文件中读取要计算的密码列表
  • -stdin:从标准输入中获取要输入的密码
  • -quiet:生成密码过程中不输出任何信息

示例:

/etc/nginx/.htpasswd换成你自己的文件存放路径

1
2
sudo sh -c "echo -n 'user:' >> /etc/nginx/.htpasswd" # user就是你要登陆的用户名
sudo sh -c "openssl passwd -apr1 >> /etc/nginx/.htpasswd" # 接下来会提示你输入密码和确认密码

系统将提示您创建密码。接下来,打开你的 Nginx 配置文件,并在 location / { 下添加这两行:

1
2
3
4
location / {
auth_basic "Restricted Content";
auth_basic_user_file /etc/nginx/.htpasswd;
...

将生成的密码串,手动添加到/etc/shadow中就可用作用户的登陆密码了。

关于openssl passwd文件,它生成的密码可以直接复制到/etc/shadow文件中,但openssl passwd因为不支持sha512,所以密码强度不够。如果要生成sha512的密码,可以使用grub-crypt生成,它是一个python脚本,只不过很不幸CentOS 7只有grub2,grub-crypt命令已经没有了。

本系列文章

参考