技术交流QQ群:①185473046   ②190706903   ③203744115   网站地图
登录

下次自动登录
现在的位置: 首页Nginx>正文
Linux下nginx使用mkcert创建的https证书
2026年05月10日 Nginx 暂无评论 ⁄ 被围观 20次+

简单说明:

1、mkcert 是一个用于在本地开发环境中创建受信任的https证书的工具。

2、mkcert通过自动创建并安装一个本地的证书颁发机构(CA)到系统和浏览器的信任库中,解决了传统自签名证书带来的浏览器安全警告问题。

3、在 Linux 环境下,nginx 部署 mkcert 创建的本地受信任的https证书是一个非常实用的配置,在本地或内网通过https访问服务,浏览器不会显示“不安全”的警告。

4、整个过程可以分为四个主要步骤:安装 mkcert、生成本地 CA 和服务器证书、配置 Nginx,以及在客户端建立信任。

安装前准备:

1、防火墙配置

Rocky Linux默认使用的是firewall作为防火墙

firewall-cmd --list-all #显示所有规则(含服务、端口、区域)

systemctl status firewalld #检查 firewalld 状态

#开放80 443 端口

firewall-cmd --permanent --add-port=80/tcp

firewall-cmd --permanent --add-port=443/tcp

firewall-cmd --reload #重新加载防火墙配置

2、关闭SELINUX

vi /etc/selinux/config

#SELINUX=enforcing #注释掉

#SELINUXTYPE=targeted #注释掉

SELINUX=disabled #增加

:wq! #保存退出

setenforce 0 #使配置立即生效

getenforce #查看 SELinux 当前运行模式

3、安装编译工具包

yum install tar make gcc gcc-c++ perl pcre2-devel zlib-devel glibc-devel

具体操作:

1、安装mkcert

1.1安装依赖包,mkcert需要nss-tools (CentOS/RHEL) 或 libnss3-tools (Ubuntu/Debian) 来管理浏览器的信任库

yum install nss-tools

1.2下载并安装mkcert

下载地址:

https://dl.filippo.io/mkcert/latest?for=linux/amd64

https://github.com/FiloSottile/mkcert

https://github.com/FiloSottile/mkcert/releases/download/v1.4.4/mkcert-v1.4.4-linux-amd64

# 下载最新版本 (请根据你的系统架构选择,此处以 linux-amd64 为例)

curl -JLO "https://dl.filippo.io/mkcert/latest?for=linux/amd64"

# 赋予执行权限

chmod +x mkcert-v*-linux-amd64

# 拷贝到系统路径,使其成为全局命令

cp mkcert-v*-linux-amd64 /usr/local/bin/mkcert

# 验证安装是否成功

mkcert -version

2、生成 CA 和服务器证书

2.1创建并安装本地 CA,这个命令会创建一个本地 CA,并将其自动添加到系统的信任库中

mkcert -install

#成功执行后,会看到如下提示

Created a new local CA

The local CA is now installed in the system trust store!

2.2生成服务器证书

# 请将下面的 your_server_ip_or_domain 替换为你实际的内网 IP(如 192.168.1.100)或自定义域名(如 myapp.local)。

# 可以同时指定多个域名或IP,例如 localhost 和你的内网IP

# mkcert your_server_ip_or_domain localhost 127.0.0.1

mkdir -p /root/cert #创建证书存放目录

cd /root/cert

mkcert 192.168.21.11 localhost 127.0.0.1

Created a new certificate valid for the following names

- "192.168.21.11"

- "localhost"

- "127.0.0.1"

The certificate is at "./192.168.21.11+1.pem" and the key at "./192.168.21.11+1-key.pem"

It will expire on 28 July 2028

#重命名证书和私钥

mv 192.168.21.11+1.pem server.crt

mv 192.168.21.11+1-key.pem server.key

3、配置 Nginx

3.1安装nginx

3.1.1 安装包下载:

① nginx

https://nginx.org/download/nginx-1.30.0.tar.gz

② zlib

https://www.zlib.net/zlib-1.3.2.tar.gz

③ pcre2

https://github.com/PCRE2Project/pcre2/releases/download/pcre2-10.47/pcre2-10.47.tar.gz

④ openssl

https://github.com/openssl/openssl/releases/download/openssl-3.5.6/openssl-3.5.6.tar.gz

3.1.2 创建nginx安装目录

mkdir -p /data/server/nginx

mkdir -p /data/server/nginx/packages

mkdir -p /data/server/nginx/install

上传安装包到/data/server/nginx/packages目录

3.1.3 安装nginx

#解压pcre

cd /data/server/nginx/packages

tar zxvf pcre2-10.47.tar.gz

#解压zlib

cd /data/server/nginx/packages

tar zxvf zlib-1.3.2.tar.gz

#解压openssl

cd /data/server/nginx/packages

tar zxvf openssl-3.5.6.tar.gz

#安装nginx

#nginx默认运行账号和组是Linux系统的内置账号和组nobody

#创建nginx运行账号和组

groupadd www

useradd -g www www -s /sbin/nologin

cd /data/server/nginx/packages

tar zxvf nginx-1.30.0.tar.gz

cd nginx-1.30.0

./configure \

--prefix=/data/server/nginx \

--user=www \

--group=www \

--without-http_memcached_module \

--with-http_stub_status_module \

--with-http_ssl_module \

--with-http_v2_module \

--with-http_gzip_static_module \

--with-http_realip_module \

--with-stream \

--with-stream_ssl_preread_module \

--with-stream_ssl_module \

--with-http_flv_module \

--with-http_mp4_module \

--with-http_sub_module \

--http-client-body-temp-path=/data/server/nginx/client \

--http-proxy-temp-path=/data/server/nginx/proxy \

--http-fastcgi-temp-path=/data/server/nginx/fcgi \

--http-uwsgi-temp-path=/data/server/nginx/uwsgi \

--with-openssl=/data/server/nginx/packages/openssl-3.5.6 \

--with-zlib=/data/server/nginx/packages/zlib-1.3.2 \

--with-pcre=/data/server/nginx/packages/pcre2-10.47

make -j$(nproc)

make install

#查看nginx版本和安装模块信息

/data/server/nginx/sbin/nginx -V

3.1.4 配置nginx启动脚本

vi /data/server/nginx/nginx.sh

#!/bin/bash

NGINX_PATH="/data/server/nginx/sbin/nginx"

PID_FILE="/data/server/nginx/logs/nginx.pid"

function start_nginx() {

if [ -f $PID_FILE ]; then

echo "Nginx is already running."

else

echo "Starting Nginx..."

$NGINX_PATH

echo "Nginx started."

fi

}

function stop_nginx() {

if [ -f $PID_FILE ]; then

echo "Stopping Nginx..."

$NGINX_PATH -s stop

echo "Nginx stopped."

else

echo "Nginx is not running."

fi

}

function restart_nginx() {

if [ -f $PID_FILE ]; then

echo "Restarting Nginx..."

$NGINX_PATH -s stop

sleep 1

$NGINX_PATH

echo "Nginx restarted."

else

echo "Nginx is not running. Starting it now..."

$NGINX_PATH

echo "Nginx started."

fi

}

function reload_nginx() {

if [ -f $PID_FILE ]; then

echo "Reloading Nginx configuration..."

$NGINX_PATH -s reload

echo "Nginx configuration reloaded."

else

echo "Nginx is not running. Cannot reload the configuration."

fi

}

function status_nginx() {

if [ -f $PID_FILE ]; then

echo "Nginx is running with PID $(cat $PID_FILE)."

else

echo "Nginx is stopped."

fi

}

case "$1" in

start)

start_nginx

;;

stop)

stop_nginx

;;

restart)

restart_nginx

;;

reload)

reload_nginx

;;

status)

status_nginx

;;

*)

echo "Usage: $0 {start|stop|restart|reload|status}"

exit 1

;;

esac

:wq! #保存退出

#添加执行权限

chmod +x /data/server/nginx/nginx.sh

#启动命令

/data/server/nginx/nginx.sh start

3.1.5 使用systemd服务实现nginx开机启动

vi /lib/systemd/system/nginx.service #添加以下代码

[Unit]

Description=The NGINX HTTP and reverse proxy server

After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]

Type=forking

PIDFile=/data/server/nginx/logs/nginx.pid

ExecStartPre=/data/server/nginx/sbin/nginx -t

ExecStart=/data/server/nginx/sbin/nginx

ExecReload=/data/server/nginx/sbin/nginx -s reload

ExecStop=/bin/kill -s QUIT $MAINPID

ExecStartPost=/bin/sleep 0.1

PrivateTmp=true

[Install]

WantedBy=multi-user.target

:wq! #保存退出

/data/server/nginx/sbin/nginx -s stop #停止

systemctl daemon-reload #重载 systemd 配置

systemctl enable nginx.service #设置开机自启动

systemctl start nginx.service #启动

systemctl stop nginx.service #关闭

systemctl restart nginx.service #重启

systemctl reload nginx.service #重新加载配置文件

3.1.6 修改nginx配置文件,让它使用刚刚生成的证书

#创建证书存放目录

mkdir -p /data/server/nginx/conf/cert/

#拷贝证书

cp /root/cert/server.crt /data/server/nginx/conf/cert/

cp /root/cert/server.key /data/server/nginx/conf/cert/

#备份默认配置文件

cp /data/server/nginx/conf/nginx.conf /data/server/nginx/conf/nginx.conf.default.bak

#创建目录

mkdir -p /data/server/nginx/conf/stream/

mkdir -p /data/server/nginx/conf/upstream

mkdir -p /data/server/nginx/conf/vhosts

vi /data/server/nginx/conf/nginx.conf

user www;

worker_processes auto;

worker_cpu_affinity auto;

worker_rlimit_nofile 65535;

error_log /data/server/nginx/logs/error.log notice;

pid /data/server/nginx/logs/nginx.pid;

events {

worker_connections 65535;

use epoll;

multi_accept on;

}

stream{

include /data/server/nginx/conf/stream/*conf;

}

http {

include mime.types;

default_type application/octet-stream;

log_format main '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" "$http_user_agent" '

'"$http_x_forwarded_for" "$upstream_cache_status" $upstream_response_time $request_time';

log_format awstats '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

access_log logs/access.log main;

#access_log off;

charset UTF-8;

server_names_hash_bucket_size 128;

client_header_buffer_size 32k;

large_client_header_buffers 4 32k;

client_max_body_size 10000m;

sendfile on;

tcp_nopush on;

keepalive_timeout 60;

tcp_nodelay on;

server_tokens off;

fastcgi_connect_timeout 300;

fastcgi_send_timeout 300;

fastcgi_read_timeout 300;

fastcgi_buffer_size 128k;

fastcgi_buffers 4 128k;

fastcgi_busy_buffers_size 256k;

fastcgi_temp_file_write_size 256k;

fastcgi_intercept_errors on;

client_header_timeout 3m;

client_body_timeout 3m;

send_timeout 3m;

connection_pool_size 256;

request_pool_size 4k;

output_buffers 4 32k;

postpone_output 1460;

client_body_buffer_size 512k;

gzip on;

gzip_min_length 1k;

gzip_buffers 4 16k;

gzip_http_version 1.0;

gzip_comp_level 3;

gzip_proxied any;

gzip_types text/plain application/x-javascript application/javascript application/json text/css text/javascript application/xml image/gif image/png image/jpg image/jpeg;

gzip_vary on;

proxy_connect_timeout 300;

proxy_read_timeout 300;

proxy_send_timeout 300;

proxy_buffers 4 64k;

proxy_busy_buffers_size 128k;

proxy_temp_file_write_size 128k;

proxy_http_version 1.1;

proxy_set_header Connection "";

proxy_ignore_client_abort on;

proxy_intercept_errors on;

proxy_next_upstream error;

proxy_buffer_size 64k;

proxy_temp_path /data/server/nginx/nginx_cache 1 2;

proxy_cache_path /data/server/nginx/nginx_proxy_cache levels=1:2 keys_zone=cache_one:128m inactive=2d max_size=128m;

proxy_pass_header Set-Cookie;

map $http_upgrade $connection_upgrade {

default upgrade;

'' close;

}

include upstream/*.conf;

include vhosts/*.conf;

}

:wq! #保存退出

vi /data/server/nginx/conf/vhosts/default.conf

server {

# 监听 443 端口,开启 SSL 和 HTTP/2

listen 443 ssl;

http2 on;

server_name _;

# --- SSL 证书配置 (已填入你的路径) ---

ssl_certificate /data/server/nginx/conf/cert/server.crt;

ssl_certificate_key /data/server/nginx/conf/cert/server.key;

# --- SSL 安全加固配置 ---

# 推荐只使用 TLSv1.2 和 TLSv1.3

ssl_protocols TLSv1.2 TLSv1.3;

# 推荐加密套件

ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-CHACHA20-POLY1305;

ssl_prefer_server_ciphers off;

# 会话缓存优化

ssl_session_cache shared:SSL:10m;

ssl_session_timeout 10m;

root /data/server/nginx/wwwroot/default;

index index.html index.htm;

access_log /data/server/nginx/logs/default.log main;

}

:wq! #保存退出

mkdir -p /data/server/nginx/wwwroot/default

vi /data/server/nginx/wwwroot/default/index.html

Thank you for using nginx

:wq! #保存退出

systemctl restart nginx.service #重启

#下载根证书并安装

mkcert -CAROOT #查找根证书

ls -l /root/.local/share/mkcert

-r--------. 1 root root 2484 Apr 28 16:53 rootCA-key.pem

-rw-r--r--. 1 root root 1761 Apr 28 16:53 rootCA.pem

根证书是rootCA.pem

下载这个文件到自己的电脑并安装

强制存入本地计算机:

1.按 Win + R 键,输入 mmc,回车。

2.点击菜单栏 “文件” -> “添加/删除管理单元...”。

3.在左侧列表中找到 “证书”,选中它,点击中间的 “添加 >”。

【关键一步】 在弹出的窗口中,一定要选“计算机账户(Computer account)”(千万别选默认的“我的用户账户”)。

点“下一步” -> 选 “本地计算机” -> 完成 -> 确定。

4.在控制台左侧依次展开:证书(本地计算机) -> 受信任的根证书颁发机构 -> 证书。

在右侧空白处右键 -> 所有任务 -> 导入...。

选择你桌面上的 rootCA.pem(或 .crt),一直点下一步直到完成。

彻底关闭浏览器(右下角托盘也要退出),重新打开尝试。

5.浏览器打开https://192.168.21.11/

现在已经显示证书安全了.

至此,Linux下nginx使用mkcert创建的https证书完成。

     

  系统运维技术交流QQ群:①185473046 系统运维技术交流□Ⅰ ②190706903 系统运维技术交流™Ⅱ ③203744115 系统运维技术交流™Ⅲ

给我留言

您必须 [ 登录 ] 才能发表留言!



Copyright© 2011-2026 系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接
陕ICP备11001040号-3