nginx使用openSSL自签生成https相关证书

生成CA私钥

openssl genrsa -out ca.key 2048

生成 CA 根证书 (自签名)

openssl req -new -x509 -days 36500 -key ca.key -out ca.crt -subj "/C=CN/ST=State/L=City/O=Organization/OU=Unit/CN=Root CA"

生成服务端私钥(给 Nginx 用)

openssl genrsa -out server.key 2048

生成服务端证书签名请求,下面ip需修改为域名或部署机器的ip

openssl req -new -key server.key -out server.csr -subj "/C=CN/ST=State/L=City/O=Organization/OU=Unit/CN=192.168.2.129"

使用CA签发服务端证书,可修改签发有效期

openssl x509 -req -days 36500 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt

生成客户端私钥(给浏览器或其它接入程序使用)

openssl genrsa -out client.key 2048

生成客户端证书签名请求,下面的client_name需修改为接入端身份标识

openssl req -new -key client.key -out client.csr -subj "/C=CN/ST=State/L=City/O=Organization/OU=Unit/CN=client_name"

使用CA签发客户端证书,可修改签发有效期

openssl x509 -req -days 36500 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out client.crt

打包客户端证书为PKCS12格式(给浏览器或其他接入程序使用)

openssl pkcs12 -export -out client.p12 -inkey client.key -in client.crt -certfile ca.crt

nginx.conf配置

复制代码
events {
    worker_connections 1024;
}

http {
   upstream gateway {
       server 192.168.1.111:8080 weight=1 max_fails=1 fail_timeout=30s;
    }

    server {
       listen 443 ssl;

	   ssl_certificate /usr/local/nginx/nginx_cert/server.crt;
       ssl_certificate_key /usr/local/nginx/nginx_cert/server.key;
	   ssl_client_certificate /usr/local/nginx/nginx_cert/ca.crt;
	   
	   # 开启客户端验证 (on 代表客户端服务端双端验证)
	   #ssl_verify_client on; 
	   
       ssl_protocols TLSv1.2 TLSv1.3;
       ssl_ciphers HIGH:!aNULL:!MD5:!RC4;

       location / {
          proxy_redirect off;
          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_http_version 1.1;
          proxy_set_header Upgrade $http_upgrade;
          proxy_set_header Connection 'upgrade';
          proxy_pass http://gateway;
       }
    }
}
相关推荐
你好潘先生10 小时前
别再记命令了,用 yeero do 说句人话就能跑脚本,而且不烧 token
服务器·python·命令行
程序员老赵1 天前
服务器文件不想 SFTP 上传?Docker 跑个 File Browser,浏览器就能管理
服务器·docker·开源
vivo互联网技术1 天前
从 10 分钟到 1 秒:ES 深度分页任意跳页的三轮优化实战
服务器·数据库·redis·elasticsearch·深度分页
牛奶2 天前
HTTPS你不知道的事
前端·https·浏览器
AlfredZhao5 天前
生产环境里,为什么不建议把普通端口直接暴露到公网?
linux·https·443·80
Avan_菜菜10 天前
FRP 内网穿透完整实战:从 HTTP 映射到 HTTPS 自签代理
运维·nginx·https
zzzzzz31012 天前
9K Star 炸裂开源!这个 C 语言写的代码知识图谱,把 Linux 内核索引压缩到了 3 分钟
linux·服务器·sql
ping某14 天前
为什么 Nginx 明明监听了 80,转发后端时却用了 4xxxx 端口?
后端·nginx
大树8816 天前
金刚石散热越强,管路越先见顶
大数据·运维·服务器·人工智能·ai