【开源项目】Nginx 自签名 SSL 证书生成与配置实操指南,使用 Docker 快速搭建

玩技站长
玩技站长
管理员, Keymaster
7098
文章
1
粉丝
软件头条评论2字数 847阅读2分49秒阅读模式

【开源项目】Nginx 自签名 SSL 证书生成与配置实操指南,使用 Docker 快速搭建-图片1

一、简介

  • 使用开源自签证书生成工具 mkcert 快速生成自签名 SSL 证书
  • 使用Docker快速启动Nginx,并配置启用自签名 SSL 证书访问
  • mkcert 开源工具地址:https://github.com/FiloSottile/mkcert
  • Docker快速启动Nginx工具代码参考:https://github.com/luler/nginx_ssl_fast
  • Nginx 自签证书访问工作原理参考下图:

二、安装

1. 安装 mkcert 工具,并生成自签证书

  • 安装方法一:直接下载可执行文件,下载地址:https://github.com/FiloSottile/mkcert/releases
    【开源项目】Nginx 自签名 SSL 证书生成与配置实操指南,使用 Docker 快速搭建-图片2

  • 安装方法二:大多数发行版Linux都可以直接安装,如ubuntu/Debian

    apt install mkcert -y
  • 安装之后,可以一键生成自签证书,如下命令

    //生成域名test.aimm.site的自签名SSL证书
    mkcert test.aimm.site
    //生成ip 192.168.1.1 的自签名SSL证书
    mkcert 192.168.1.1

    【开源项目】Nginx 自签名 SSL 证书生成与配置实操指南,使用 Docker 快速搭建-图片3

2. Nginx配置使用自签名SSL证书

  • 不限定域名ip,该服务会独占一个端口,可以通过ip+端口、域名+端口方式访问
    server {
        listen 8443 ssl default_server reuseport;
        server_name _; # 匹配所有ip、域名请求
        #设置证书
        ssl_certificate /etc/nginx/conf.d/certs/justfortest.com.pem;
        ssl_certificate_key /etc/nginx/conf.d/certs/justfortest.com-key.pem;
        client_max_body_size 100M;  # 设置为100MB
        # 这里可以反向代理到任何后端服务,如下示例代理到portainer服务                                                 
        location / {
            proxy_pass http://host.docker.internal:9000;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }
  • 限定域名访问,一个端口服务于多个域名,根据域名反代到不同的后端服务
    server {
        listen 9443 ssl default_server;
        server_name _; # 默认匹配所有ip、域名请求
        # 为默认 server 块添加 SSL 证书配置
        ssl_certificate /etc/nginx/conf.d/certs/justfortest.com.pem;
        ssl_certificate_key /etc/nginx/conf.d/certs/justfortest.com-key.pem;
        return 444; # 特殊状态码,会关闭连接而不发送响应头
    }
    server {
        listen 9443 ssl;
        server_name portainer.aimm.site; # 如果需要指定域名访问,修改为你的域名
        #设置证书
        ssl_certificate /etc/nginx/conf.d/certs/justfortest.com.pem;
        ssl_certificate_key /etc/nginx/conf.d/certs/justfortest.com-key.pem;
        client_max_body_size 100M;  # 设置为100MB
        location / {
            proxy_pass http://host.docker.internal:9000;
            proxy_set_header Host $http_host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    }

3. Docker快速启动Nginx

  • 新建docker-compose.yml配置文件,内容如下
    services:
      nginx:
        image: nginx:latest
        network_mode: host
        volumes:
          - ./conf.d:/etc/nginx/conf.d
        restart: always
  • 其中conf.d目录提前创建,配置格式如下
    conf.d/
    ├── certs //证书文件目录,可以使用mkcert工具生成,对应Nginx配置文件中的ssl证书配置
    │   ├── justfortest.com-key.pem
    │   └── justfortest.com.pem
    └── default.conf  //Nginx配置文件,可复制上面的Nginx配置示例
  • 配置完毕,一键启动
    docker-compose up -d

三、访问使用

  • 自签证书网站都会被浏览器标识为不安全,莫慌张,正常的,点击继续即可
    浏览器的不安全网站提示

    点击继续即可进入Nginx反代的后端应用服务,如下示例是进入portainer服务
  • 如果域名已经解析到服务器ip,也可以通过域名访问,如下示例

四、总结

  • mkcert工具生成自签名证书比openssl简单快捷多了,随时随地快速生成自定义SSL证书
  • 给自己的网站加上自签名SSL证书,在一定程度上提高了网站的安全性,防止公共网络数据窃听、中间人工具等

 
匿名

发表评论

匿名网友
确定

拖动滑块以完成验证