公网IP采用自签名证书配置https并消除浏览器不安全告警

发布于:2025-09-14 ⋅ 阅读:(15) ⋅ 点赞:(0)

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,根据提示安装证书,步骤如下:

重启浏览器再次访问,可以看到连接已经变为安全: