https如何通过nginx完成双向认证转发

 更新时间:2024年11月19日 09:18:05   作者:darkeering  
文章详细介绍了HTTPS单向认证和双向认证的概念,并提供了生成自签证书、配置Nginx进行双向认证的具体步骤,通过双向认证,服务端和客户端可以互相验证身份,提升安全性,在测试过程中,使用浏览器访问HTTPS接口时,需要安装客户端证书才能成功获取数据

https 单向认证和双向认证

具体可以看看这篇文章 https双向认证,写的很详细和形象

  • 单向认证

  • 双向认证

生成自签证书、服务端证书和客户端证书

具体可以看这篇文章 Nginx配置ssl双向认证

1.CA 与自签名

# 生成CA私钥,会让你输自定义密码(例:000000)
openssl genrsa -aes256 -out ca.key 2048

# 制作CA公钥/根证书
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
# 输入CA密码:000000
# Common Name 随意填写(test.com);其它随意

2.服务端证书(server.client server.key)

# 生成服务器私钥(.pem文件),会让你输自定义密码(例:111111)
openssl genrsa -aes256 -out server.pem 1024
# .pem文件转换.key文件
openssl rsa -in server.pem -out server.key
# 输入Server密码:111111

# 生成签发请求
openssl req -new -key server.pem -out server.csr
# 输入Server密码:111111
# Common Name填写自己的ip地址即可,其他随意

# 用CA签发证书
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
# 输入CA密码:000000

3.客户端证书(client.client client.key)

# 生成客户端私钥(.pem文件),会让你输自定义密码(例:222222)
openssl genrsa -aes256 -out client.pem 1024
# .pem文件转换.key文件
openssl rsa -in client.pem -out client.key
# 222222

# 生成签发请求
openssl req -new -key client.pem -out client.csr
# 输入Client密码:222222
# Common Name填写自己的ip地址即可,其他随意

# 用CA签发证书
openssl x509 -req -sha256 -in client.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out client.crt
# 输入CA密码:000000

# 使用浏览器访问时,需要生成p12格式的客户端证书,会让你输入自定义密码(例:123456)
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

服务端使用 https 进行通信,并使用双向认证

const express = require("express");
const https = require("https");
const fs = require("fs");
const app = express();
const PORT = 7000;
const options = {
  key: fs.readFileSync("./ssl/server.key"),
  cert: fs.readFileSync("./ssl/server.crt"),
  ca: [fs.readFileSync("./ssl/ca.crt")],
  requestCert: true,
  rejectUnauthorized: true,
};

https
  .createServer(options, app)
  .listen(PORT, () => console.log(`App listening on port ${PORT}!`));

app.get("/v1", (req, res) => res.send("Hello World!"));

配置 nginx,进行转发

server {
    listen       8080;
    server_name  localhost;

    location /api {
        proxy_ssl_certificate ssl/client.crt;
        proxy_ssl_certificate_key ssl/client.key;
        # client-pw.txt 里面是Client密码:222222
        proxy_ssl_password_file ssl/client-pw.txt;
        proxy_pass https://localhost:7000/v1;

    }
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

测试

  1. 直接使用浏览器访问 https://loalhost:7000/v1 是获取不到数据的
  2. 使用 http://loalhost:8080/api 是可以获取到数据的
  3. 或者浏览器安装 client.p12 证书(安装时输入的密码是 p12 密码:123456)也是可以通过 https://loalhost:7000/v1 获取数据

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Nginx配置多个端口进行监听的实现

    Nginx配置多个端口进行监听的实现

    随着容器的应用越来越多,将nginx部署在容器中也是常有之事,本文主要介绍了Nginx配置多个端口进行监听的实现,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-07-07
  • 使用nginx正向代理实现内网域名转发过程解析

    使用nginx正向代理实现内网域名转发过程解析

    这篇文章主要介绍了使用nginx正向代理实现内网域名转发过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • 详解nginx使用ssl模块配置HTTPS支持

    详解nginx使用ssl模块配置HTTPS支持

    本篇文章主要介绍了详解nginx使用ssl模块配置HTTPS支持 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-12-12
  • 线上Nginx频繁502的排查过程与解决方案

    线上Nginx频繁502的排查过程与解决方案

    本文详细介绍了在线上Nginx频繁出现502错误的排查过程,包括监控数据、Nginx和后端服务的状态检查、连接数分析以及最终的解决方案,作者通过调整系统参数、优化Nginx配置和多实例负载均衡等措施,成功解决了502错误问题,需要的朋友可以参考下
    2026-01-01
  • nginx访问返回504问题及解决

    nginx访问返回504问题及解决

    这篇文章主要介绍了nginx访问返回504问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • Nginx静态资源优化、压缩、缓存详解

    Nginx静态资源优化、压缩、缓存详解

    文章主要介绍了如何优化Nginx对静态资源的处理,包括sendfile、tcp_nopush和tcp_nodelay三个属性的配置,以及如何通过设置Gzip来压缩静态资源,此外,还详细解释了Web缓存的概念,包括客户端缓存和服务器缓存,并介绍了浏览器缓存的相关指令和执行流程
    2025-12-12
  • nginx 多个location转发任意请求或访问静态资源文件的实现

    nginx 多个location转发任意请求或访问静态资源文件的实现

    这篇文章主要介绍了nginx 多个location转发任意请求或访问静态资源文件的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Nginx实战之反向代理WebSocket的配置实例

    Nginx实战之反向代理WebSocket的配置实例

    最近在工作中遇到一个需求,需要使用 nginx 反向代理websocket,经过查找一番资料,目前已经测试通过,所以这篇文章主要给大家介绍了Nginx反向代理WebSocket配置的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-04-04
  • nginx子目录代理的实现示例

    nginx子目录代理的实现示例

    本文主要介绍了nginx子目录代理的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2026-01-01
  • nginx的zabbix 5.0安装部署的方法步骤

    nginx的zabbix 5.0安装部署的方法步骤

    之前大家可能经常会基于apache去部署zabbix,但是这样会偶尔遇到一些问题,今天小编就带大家操作一下基于nginx的zabbix5.0的部署。感兴趣的可以了解一下
    2021-07-07

最新评论