请开启 JavaScript
Macbook 本地生成 SSL 证书,根治谷歌浏览器搜索栏出现红色不安全感叹号 – 老迟笔记

Macbook 本地生成 SSL 证书,根治谷歌浏览器搜索栏出现红色不安全感叹号

1、需求背景:

我是一个轻微强迫症,抖音小红书有小红点必点,同样的,天天接触的浏览器有红色感叹号也会很不得劲。

之前一直在自己的服务器线上开发,但每次写完PHP代码,都要上传到远程服务器一下,挺麻烦,所以还是改回本地开发了,这下谷歌搜索栏提示的红色感叹号我就受不了了。

2、‌安装 mkcert‌【在macbook执行,不在docker容器里执行】

brew install mkcert

注:如果没有brew,执行这个命令

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"

3、初始化本地 CA【在macbook执行,不在docker容器里执行】

mkcert -install

此命令会在系统信任存储中安装本地根证书,后续生成的证书将自动被浏览器信任

4、生成证书‌【在主机执行,不在docker容器里执行】

mkcert test localhost 127.0.0.1 ::1

注:为了测试方便,我本地测试站点的域名就是test,不是www.test.com这种,你需要替换为自己的本地测试域名

支持同时为域名、IP 和通配符生成证书(如 *.test.com),生成的文件包含 .pem(证书)和 -key.pem(私钥)

5、Nginx 配置示例【在 docker nginx容器 或 openresty容器里配置】

server {
    listen 80;
    server_name test;

    # HTTP 重定向到 HTTPS
    return 301 https://$server_name$request_uri;
}

server {
    listen 443 ssl;
    http2 on;
    server_name test;

    # SSL 证书配置
    ssl_certificate /usr/local/openresty/nginx/cert/test+3.pem;
    ssl_certificate_key /usr/local/openresty/nginx/cert/test+3-key.pem;
    ssl_protocols TLSv1.2 TLSv1.3;
    ssl_prefer_server_ciphers on;
    ssl_ciphers 'ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384';
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;

    # 基础参数
    charset utf-8;
    root /data/test;
    index index.html index.php;
    error_log /usr/local/openresty/nginx/logs/error-test.log error;

    # 重定向控制
    server_name_in_redirect off;
    absolute_redirect off;

    # 主location规则
    location / {
        try_files $uri $uri/ @phpfallback;
    }

    # PHP处理(安全增强版)
    location ~ \.php$ {
        fastcgi_pass php84:9000;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name;
        fastcgi_param DOCUMENT_ROOT $realpath_root;

        # 安全限制
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_intercept_errors on;
        try_files $uri =404;  # 防止任意文件执行
    }

    location @phpfallback {
        rewrite ^ /index.php?$query_string last;
    }

    # 静态资源优化
    location ~* \.(js|css|png|ico)$ {
        expires 30d;
        access_log off;
        add_header Cache-Control "public";
    }

    # 安全防护
    location ~ /\.(?!well-known) {
        deny all;
    }
    location = /favicon.ico {
        log_not_found off;
        access_log off;
    }
}

注:在你通过docker run创建容器时,应该通过-v指定映射目录了吧,把在macbook得到的证书和私钥复制或移动到当初指定的macbook的映射目录里,然后进入docker容器后,通过cp命令可以将证书移动搭配nginx配置文件指定的路径下

6、浏览器缓存清除‌

Chrome访问:

chrome://net-internals/#hsts

在"Delete domain"输入test执行删除

7、重启主机

我配置时,就遇到了curl 可以正常返回结果,但是谷歌浏览器访问就会无法访问的问题,重启一下好了

另外,如果你突然访问网站访问不了了,那先检查是否把代理软件打开了,其次检查容器状态是否正常,拿nginx容器和php容器为例,再打开nginx容器前,必须打开其配置文件里相关联的php容器,否则nginx容器就可能起不起来

8、关于代理软件的设置

很多时候,我们开发的同时会将代理软件打开,但是众所周知代理软件一开,本地的环境就没办法访问了,所以如果使用代理软件,也要设置一下。以clash x为例,