公网IP采用自签名证书配置https并消除浏览器不安全告警
1.安装nginx
1.1 预先安装支撑软件
yum -y install make zlib zlib-devel gcc-c++ libtool openssl openssl-devel pcre-devel
gcc、gcc-c++ # 主要用来进行编译相关使用
openssl、openssl-devel # 一般当配置https服务的时候就需要这个了
zlib、zlib-devel # 主要用于文件的解压缩
pcre、pcre-devel # Nginx的rewrite模块和HTTP核心模块会用到PCRE正则表达式语法
make # 遍历
make install # 安装
1.2 下载 nginx
下载地址:http://nginx.org/download/
解压(注意对应上你自己下载的版本):
tar -zxvf nginx-1.26.0.tar.gz #解压
进入到解压目录
cd nginx-1.26.0
1.3 编译安装nginx
编译安装nginx,默认安装到 /usr/local/nginx中
//编译
./configure --prefix=/usr/local/nginx --with-http_stub_status_module --with-http_ssl_module//安装
make && make install
在使用 ./configure编译安装 Nginx 时,--with-http_stub_status_module和 --with-http_ssl_module是两个用于显式启用特定功能模块的选项。Nginx 的核心功能由多个模块组成,默认编译时仅包含基础模块(如静态文件处理、反向代理等),扩展功能需要通过 --with-*或 --add-module等参数手动启用。以下是这两个选项的具体作用:
1. --with-http_stub_status_module:启用状态监控模块
作用:
该模块用于提供 Nginx 运行状态的实时监控数据。启用后,Nginx 会生成一个简单的 HTTP 接口(需通过 location配置访问路径),返回当前 Nginx 服务的关键运行指标,例如:
活跃连接数(active connections)
已接受的客户端连接总数(accepts)
已处理的请求总数(handled/ requests)
当前正在读取请求头的连接数(Reading)
正在向客户端写入响应的连接数(Writing)
空闲等待请求的连接数(Waiting)
典型用途:
通过监控这些指标,可以快速评估 Nginx 的负载情况、连接效率,排查性能瓶颈(例如高并发时的连接阻塞问题)。生产环境中常用工具(如 Prometheus + Grafana)也会通过此接口采集 Nginx 状态数据。
2. --with-http_ssl_module:启用 HTTPS 加密模块
作用:
该模块为 Nginx 提供 HTTPS 协议支持(即基于 SSL/TLS 的加密通信)。启用后,Nginx 可以处理 HTTPS 请求,完成 SSL 握手、证书验证、数据加密/解密等操作。
典型用途:
为网站启用 HTTPS(如通过 Let’s Encrypt 颁发的免费证书),保护客户端与服务器之间的通信安全(防止数据被窃听或篡改)。
支持需要加密传输的场景(如支付接口、用户登录、API 调用等)。
关键依赖:
启用此模块前,需确保系统已安装 OpenSSL 开发库(如 libssl-dev或 openssl-devel),否则编译会失败。
2.mkcert证书生成
平时在开发时,有时会要求通过 HTTPS 请求来访问。一个通用的做法是用 OpenSSL 生成自签证书,然后对 Web 服务进行配置。但 OpenSSL 的命令比较繁琐,参数也比较复杂,用起来不够方便。于是这里介绍一个替代方案:mkcert
mkcert是一个用于生成本地自签名 SSL 证书的开源工具,项目基于 Golang 开发,可跨平台使用,不需要配置,支持多域名以及自动信任 CA。
mkcert项目地址:https://github.com/FiloSottile/mkcert
2.1 安装mkcert
(1) 直接下载编译好的二进制文件安装
在mkcert的github下载页面(如下图所示)找到直接操作系统、架构对应的安装包
例如,ubuntu 22.04 64位系统
wget -O mkcert https://github.com/FiloSottile/mkcert/releases/tag/v1.4.4/mkcert-v1.4.4-linux-amd64
为二进制文件添加可执行权限,并移动到 $PATH 中:
chmod +x mkcert
mv mkcert /usr/local/bin/
检查 mkcert 的版本:
[root@localhost ~]# mkcert -version
v1.4.3
如果版本显示正常,说明安装无误
(2)源码编译安装
首先需要安装GO(1.13+)
然后下载源码编译
git clone https://github.com/FiloSottile/mkcert && cd mkcert
go build -ldflags "-X main.Version=$(git describe --tags)"
编译成功之后,会在源码目录下生成安装包
为二进制文件添加可执行权限,并移动到 $PATH 中:
chmod +x mkcert
mv mkcert /usr/local/bin/
2.2 使用mkcert生成证书
mkcert 生成证书的命令很简单,格式如下:
mkcert domain1 [domain2 [...]]
多个域名/IP用空格分隔,一个自签名的证书可以这样创建:
[root@localhost ~]# mkcert 192.168.128.134 example.com localhost 127.0.0.1 ::1
Note: the local CA is not installed in the system trust store.
Note: the local CA is not installed in the Firefox and/or Chrome/Chromium trust store.
Run "mkcert -install" for certificates to be trusted automatically
Created a new certificate valid for the following names
- "192.168.128.134"
- "example.com"
- "localhost"
- "127.0.0.1"
- "::1"
The certificate is at "./192.168.128.134+4.pem" and the key at "./192.168.128.134+4-key.pem"
It will expire on 7 September 2027
在这个证书中,192.168.128.134 是服务器的ip地址。命令执行后会生成两个文件:192.168.128.134-key.pem 和 192.168.128.134.pem,前者是私钥,后者是证书。
3.nginx配置 证书
3.1 mkcert生成证书
在任意目录下使用mkcert生成证书
mkcert 192.168.128.134
之后生成 192.168.128.134-key.pem 和 192.168.128.134.pem
将这两个证书放到nginx配置目录 /etc/nginx/ssl。注意有时候会出现有/etc/nginx目录但是没有ssl目录的情况,出现这种,手动创建ssl目录,然后把两个证书文件放到目录下。
3.2 配置 nginx
在/usr/local/nginx/conf目录下有nginx.conf
启用443端口配置,主要把ssl_certificate、ssl_certificate_key指向两个证书文件所在目录
server {
listen 443 ssl;
server_name localhost;
ssl_certificate /etc/nginx/ssl/192.168.128.134.pem;
ssl_certificate_key /etc/nginx/ssl/192.168.128.134-key.pem;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}
然后进入 /usr/local/nginx/sbin 目录,用这个目录下的命令启停nginx
cd /usr/local/nginx/sbin/
./nginx #启动
./nginx -s stop #停止
./nginx -s quit #退出
./nginx -s reload #重启 修改配置后重新加载生效<br><br>./nginx -s reopen :重新打开日志文件<br>
启动 nginx 服务,然后从 PC 端访问 https://192.168.128.134 查看效果:
可以看到,浏览器访问到了页面,但连接是不安全的。而我们在开发时,可能会对连接的安全性有要求,那有没有办法建立安全的连接呢?
正如介绍所言,mkcert 支持自动信任 CA,所以只要在 PC 端安装好 CA 证书就能解决这个问题。下个章节介绍具体方案。
4.消除浏览器安全警告
回到服务器,执行以下命令将 mkcert 的认证机构安装到服务器上:
[root@localhost ~]# mkcert -install
CA 证书的位置可以通过以下命令查看:
[root@localhost ~]# mkcert -CAROOT
/root/.local/share/mkcert
该目录中有两个文件:rootCA-key.pem 和 rootCA.pem。将 rootCA.pem 下载到 PC 上,并将后缀改为 .crt。
双击 rootCA.crt,根据提示安装证书,步骤如下:
重启浏览器再次访问,可以看到连接已经变为安全: