Windows
我的本地电脑是win10系统,连接了公司wifi,并且分配到局域网IP 192.168.0.75
(可以通过打开cmd执行ipconfig,找到WLAN下的IPv4地址)
我想把此电脑作为一个web服务器来用,所以安装启动nginx服务,于是现在我和公司其他人可以通过 http://192.168.0.75 访问我的电脑了,并弹出nginx欢迎页
但是现在有了新需求,http访问有个安全问题,导致某些场景被浏览器针对,例如非https网页不允许调用用户摄像头,对webrtc之类的应用就没法正常运行
为了扩展我web服务的能力,我打算为本电脑局域网IP配置自签名证书,并配置到nginx,再到客户端导入证书,最终目标效果:
可以通过以下2种方式,使用https协议访问到我的nginx首页
-
目标1:https://summer
以下开始记录
安装openssl
安装
官网:Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions
下方选择 Win64 OpenSSL xxx Light 的 exe 下载,一直下一步安装完成
配置环境变量
将安装目录下的bin配置到path系统环境变量中:C:\Program Files\OpenSSL-Win64\bin
执行 openssl -v ,输出结果说明已配置好
生成证书与nginx配置
创建证书配置
到nginx安装目录(我是 D:\App\nginx\conf),新建文件夹用于存放证书,命名为ssl
在里面新建一个txt文本文件,在里面写入以下内容:
需要自定义的地方是[alt_names]段,里面要写自己希望注册证书的域名、IP,当然就是自己的IP
以及CN字段(Common Name的意思),可以理解为给这个证书的名称,填我们的域名、IP就行
x509_extensions = v3_req # X.509扩展段
req_extensions = v3_req
# 主题信息段(对应 -subj 参数)
[req]
prompt = no # 关闭交互式输入
default_bits = 2048 # RSA密钥长度
default_keyfile = server.key # 私钥输出路径
ST = Guangdong
L = Guangzhou
O = Local
CN = summer # 通用名称
# 扩展段(对应 -addext 参数)
[v3_req]
subjectAltName = @alt_names
# 将以下域名/IP注册证书(域名用DNS.x,IP用IP.x)
[alt_names]
DNS.1 = summer
DNS.2 = localhost
IP.1 = 192.168.0.75
IP.2 = 127.0.0.1
保存后,重命名为 openssl.cnf
生成证书
执行命令根据刚刚的配置生成证书,有效期设置10年
另外可以考虑手动分配IP,不然隔段时间重启再连wifi可能分配到的IP又变了,证书就废了
# 在 conf/ssl 下生成证书
cd D:\App\nginx\conf\ssl
openssl req -x509 -nodes -days 3650 -keyout server.key -out server.crt -config openssl.cnf
配置nginx
在 nginx.conf 中加入此server块,以支持https协议访问
server {
listen 443 ssl;
server_name 192.168.0.75;
ssl_certificate ssl/server.crt;
ssl_certificate_key ssl/server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
重启nginx
有个注意点,其他程序可能会占用443端口,如 vmvare hostd,这种情况可以先把占用的干掉
# 观察是否有程序占用443端口
netstat -ano | findstr :443
tasklist | findstr 占用的PID
# 有的话需要干掉
taskkill /f /pid 占用的PID
# 重启nginx
taskkill /f /im nginx*
cd D:\App\nginx
start nginx
tasklist | findstr nginx
客户端信任证书
win
把生成的 server.crt 复制到其他win电脑,双击安装
点击安装证书 -> 勾选本地计算机 -> 放到下列存储(浏览) -> 选择受信任的根证书颁发机构 -> 完成
访问 https://192.168.0.75 ,如果没有提示不安全,则配置完成,至此目标1达成
安卓(小米)
把生成的 server.crt 复制到手机
系统设置 -> 搜索“证书” -> 安装证书 -> CA证书 -> 仍然安装 -> 选择 server.crt 安装
不起作用!! 查阅原因:安卓7+后应用不信任用户证书
配置host
我们想用 https://summer 访问web服务器,但是summer这个域名我们的电脑是不认识的
得去电脑的“花名册”里记录下,访问summer域名时,解析到192.168.0.233
每个想要通过自定义域名,访问内网设备的电脑,都要进行这一步
前往文件夹:C:\Windows\System32\drivers\etc\
右键hosts文件-属性-安全-编辑-选择Users组勾选完全控制权限-应用
用VSCode打开hosts文件,在最底下追加一行并保存:
192.168.0.233 summer
重启浏览器或开一个无痕窗口,并在地址栏输入 https://summer
如果成功进入nginx欢迎页,说明host配置完成,至此目标2达成