htpasswd实现Nginx验证访问windows环境下nginx配置SSL证书(自建版)

参考:

概览:

  • windows环境下实现nginx配置ssl证书
  • htpasswd实现Nginx验证访问
  • 效果
  • nginx配置SSL证书此种针对http https协议均有效

ssl证书作用:

  • SLY(Secure Sockets Layer)证书是用于加密和保护网站与用户之间的数据传输的数字证书。
  • 数据加密:SSL证书使用加密算法,将数据在用户的计算机和网站服务器之间传输时进行加密。这意味着即使黑客拦截了数据包,他们也无法读取或解密其中的敏感信息,如用户名、密码、信用卡号等。
  • 身份验证:SSL证书用于验证网站的身份。当用户访问一个启用SSL的网站时,他们的浏览器会收到网站的SSL证书,并通过检查证书的有效性来确认网站是否合法。这有助于防止钓鱼攻击,确保用户连接到正确的网站。
  • 数据完整性:SSL证书还确保数据在传输过程中不被篡改。通过使用数字签名,证书可以验证数据是否在传输过程中被篡改。如果数据被篡改,浏览器会发出警告,用户就会知道数据不再可信。
  • 改善搜索引擎排名:搜索引擎(如Google)已将SSL证书作为搜索排名的一个因素。网站启用SSL后,它们更有可能在搜索结果中获得更高的排名,这有助于提高网站的可见性和信誉。
  • 合规性要求:一些法规和标准要求网站使用SSL证书来保护用户数据,特别是涉及敏感信息的行业,如金融、医疗保健和电子商务。不遵守这些规定可能导致法律问题和数据泄露。
  • 总之,SSL证书对于确保数据的机密性、完整性和认证性非常重要,是保护用户隐私和数据安全的关键工具。许多网站和在线服务都使用SSL证书来提供更安全的用户体验。

一. windows安装完成nginx配置ssl

环境及软件包:

ssl文件上传到windowsnginx配置nginx.conf目录

image-20231026112806584

配置nginx.conf配置文件

  • server模块添加证书即可 参数如下

  • ssl on;

  • ssl_certificate ssl.crt;

  • ssl_certificate_key ssl_nopass.key;

  • ssl_session_timeout 5m; 

  • ssl_prefer_server_ciphers on;

  • 若生成ssl时不去掉密码 服务器操作Nginx命令时都需要输入密码非常不方便 ( 如 )

    1
    2
    3
    4
    # 生成私钥
    openssl genpkey -algorithm RSA -out server.key
    # 生成自签名的 SSL 证书
    openssl req -new -x509 -key server.key -out server.crt -days 365

nginx主要配置部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 主要配置    
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate ssl.crt;
ssl_certificate_key ssl_nopass.key;
ssl_session_timeout 5m;
ssl_prefer_server_ciphers on;
#charset koi8-r;

#access_log logs/host.access.log main;

location / {
root html;
index index.html index.htm;
}

二. htpasswd实现Nginx验证访问

0. 环境

ubuntu20.04 LTS

1.安装

1
2
3
4
# centos
yum -y install httpd-tools
# ubuntu
sudo apt-get install apache2-utils

2. 使用

参数:

  • -c 创建passwdfile.如果passwdfile 已经存在,那么它会重新写入并删去原有内容.
  • -n 不更新passwordfile,直接显示密码
  • -m 使用MD5加密(默认)
  • -d 使用CRYPT加密(默认)
  • -p 使用普通文本格式的密码
  • -s 使用SHA加密
  • -b 命令行中一并输入用户名和密码而不是根据提示输入密码,可以看见明文,不需要交互
  • -D 删除指定的用户

使用详情:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 利用htpasswd命令添加用户
htpasswd -bc .passwd www.linuxde.net php
# 在bin目录下生成一个.passwd文件,用户名www.linuxde.net,密码:php,默认采用MD5加密方式。
# 在原有密码文件中增加下一个用户
htpasswd -b .passwd Jack 123456
# 去掉-c选项,即可在第一个用户之后添加第二个用户,依此类推。
# 不更新密码文件,只显示加密后的用户名和密码
htpasswd -nb Jack 123456
# 不更新.passwd文件,只在屏幕上输出用户名和经过加密后的密码。
# 利用htpasswd命令删除用户名和密码
htpasswd -D .passwd Jack
# 利用htpasswd命令修改密码
htpasswd -D .passwd Jack
htpasswd -b .passwd Jack 123456
# 即先使用htpasswd删除命令删除指定用户,再利用htpasswd添加用户命令创建用户即可实现修改密码的功能。

3.配置 htpasswd实现Nginx验证访问

①. 创建用户密码
1
2
3
4
# 创建秘钥目录
mkdir -p /home/nginx/htpasswd/
# 生成秘钥
htpasswd -c /home/nginx/htpasswd/kba.htpasswd zznn

image-20231026151937466

②. 主要配置项
1
2
3
# 主要配置项              
auth_basic "Basic Authentication";
auth_basic_user_file "/home/nginx/htpasswd/kba.htpasswd";
③. 配置Nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# 重要配置项    
server {
listen 443 ssl; # 监听443端口
server_name localhost; # 域名
root /usr/local/nginx/html; # 项目的根目录
index index.html index.htm;
ssl_certificate /usr/local/nginx/key/ssl.crt; # ssl配置文件(注意路径)
ssl_certificate_key /usr/local/nginx/key/ssl_nopass.key; # ssl配置文件(注意路径)
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
location / {
proxy_pass http://10.0.0.10:90;
auth_basic "Basic Authentication";
auth_basic_user_file "/home/nginx/htpasswd/kba.htpasswd";
# index index.html index.htm;
}
error_page 404 /404.html;
location = /40x.html {
}

error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
④. 此时重启Nginx即可
1
2
3
# 重启Nginx
systemctl restart nginx
systemctl reload nginx

NOTE: 如果想不输入密码直接这样访问即可https://tom:123@10.0.0.10/#/

三. 效果

效果1 (尚未配置密码验证)

提示不安全的原因是因为,我们使用的证书,浏览器无法验证证书的安全性,只有使用购买的证书才能避免这种现象

image-20231026113415082

效果2(配置密码验证-输入成功后即可登录到网页)

image-20231026152109216

结语fighting!