自建CA实战之 《0x02 Nginx 配置 https双向认证》

2023-12-01 09:15

本文主要是介绍自建CA实战之 《0x02 Nginx 配置 https双向认证》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

自建CA实战之 《0x02 Nginx 配置 https双向认证》

上一章节我们已经实现了Nginx上配置https单向认证,主要场景为客户端验证服务端的身份,但是服务端不验证客户端的身份。

本章节我们将实现Nginx上配置https双向认证,主要场景为客户端验证服务端的身份,同时服务端也验证客户端的身份,简称双向认证。

双向认证的使用场景很多,比如我们在使用网银的U盾登录的时候,就是使用的双向认证,客户端验证服务端的身份,同时服务端也验证客户端的身份。

配置Nginx

在上一章节的基础上,我们只需要在Nginx上配置要求客户端验证即可。

把根证书导出到ssl/ca.crt,增加两行配置即可:

    ssl_verify_client on; # 要求客户端验证ssl_client_certificate ssl/ca.crt; # 信任该CA颁发的客户端证书

最终的配置如下:

server {listen       80; # 监听 80 端口listen 443 ssl;  # 监听 443 端口,用于SSLserver_name  _; # 默认主机名/域名,这里我们不设置域名,所以用下划线代替ssl_certificate ssl/web.crt; # 导出的证书ssl_certificate_key ssl/web.key; #导出的私钥ssl_verify_client on; # 要求客户端验证ssl_client_certificate ssl/ca.crt; # 信任该CA颁发的客户端证书ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;location / {root   /usr/share/nginx/html;index  index.html index.htm;}
}

尝试访问,可以看到浏览器提示需要证书:

在这里插入图片描述

创建客户端证书

创建密钥

创建证书

来源选项卡中

  • 使用此CA证书进行签名 -> 自建的CA证书
  • 使用模版创建新证书 -> TLS_client

点击【应用模版所有信息

在这里插入图片描述

主体选项卡中

需要注意的地方就是 commonName,这里我们需要填写的是客户端的域名

在这里插入图片描述

导出证书

导出格式选择PKCS#12证书链(*.pfx)

在这里插入图片描述

设置证书的密码,导入的时候需要用到。导入的时候双击打开证书,一直下一步就好。

在这里插入图片描述

重启浏览器,访问,可以看到浏览器提示需要选择证书:

在这里插入图片描述

点击小锁头,可以看到当前已经选择了客户端证书。

在这里插入图片描述

让 Nginx 日志记录客户端证书信息

我们可以通过Nginx的日志记录客户端证书信息,方便我们后续分析。效果如下图:

在这里插入图片描述

172.22.0.1 - - [25/Nov/2023:18:22:06 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36 Edg/119.0.0.0" "emailAddress=taills@qq.com,CN=TestUserClient,OU=WeiPang,O=WeiPang,L=Nanning,ST=Guangxi,C=CN" "emailAddress=taills@qq.com,CN=TowereSec,OU=TowereSec,O=Towere,L=Nanning,ST=GuangXi,C=CN"

配置Nginx

# 增加日志格式
log_format main_ext '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$ssl_client_s_dn" "$ssl_client_i_dn"';
server {listen       80; # 监听 80 端口listen 443 ssl;  # 监听 443 端口,用于SSLserver_name  _; # 默认主机名/域名,这里我们不设置域名,所以用下划线代替ssl_certificate ssl/web.crt; # 导出的证书ssl_certificate_key ssl/web.key; #导出的私钥ssl_verify_client on; # 要求客户端验证ssl_client_certificate ssl/ca.crt; # 信任该CA颁发的客户端证书ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;access_log /var/log/nginx/access.log main_ext; # 使用新的日志格式location / {root   /usr/share/nginx/html;index  index.html index.htm;}
}

可以在docker-compose.yml中增加日志目录,方便我们查看日志:

version: '2.1'
services:nginx:image: nginx# restart: alwaysports:- "80:80"- "443:443"volumes:- ./html:/usr/share/nginx/html:ro- ./conf.d:/etc/nginx/conf.d:ro- ./ssl:/etc/nginx/ssl:ro- ./logs:/var/log/nginx

这篇关于自建CA实战之 《0x02 Nginx 配置 https双向认证》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/440574

相关文章

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

使用 sql-research-assistant进行 SQL 数据库研究的实战指南(代码实现演示)

《使用sql-research-assistant进行SQL数据库研究的实战指南(代码实现演示)》本文介绍了sql-research-assistant工具,该工具基于LangChain框架,集... 目录技术背景介绍核心原理解析代码实现演示安装和配置项目集成LangSmith 配置(可选)启动服务应用场景

SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤

《SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤》本文主要介绍了SpringBoot+MyBatis-Flex配置ProxySQL的实现步骤,文中通过示例代码介绍的非常详... 目录 目标 步骤 1:确保 ProxySQL 和 mysql 主从同步已正确配置ProxySQL 的

Spring Boot整合log4j2日志配置的详细教程

《SpringBoot整合log4j2日志配置的详细教程》:本文主要介绍SpringBoot项目中整合Log4j2日志框架的步骤和配置,包括常用日志框架的比较、配置参数介绍、Log4j2配置详解... 目录前言一、常用日志框架二、配置参数介绍1. 日志级别2. 输出形式3. 日志格式3.1 PatternL

nginx部署https网站的实现步骤(亲测)

《nginx部署https网站的实现步骤(亲测)》本文详细介绍了使用Nginx在保持与http服务兼容的情况下部署HTTPS,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值... 目录步骤 1:安装 Nginx步骤 2:获取 SSL 证书步骤 3:手动配置 Nginx步骤 4:测

配置springboot项目动静分离打包分离lib方式

《配置springboot项目动静分离打包分离lib方式》本文介绍了如何将SpringBoot工程中的静态资源和配置文件分离出来,以减少jar包大小,方便修改配置文件,通过在jar包同级目录创建co... 目录前言1、分离配置文件原理2、pom文件配置3、使用package命令打包4、总结前言默认情况下,

在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程

《在Java中使用ModelMapper简化Shapefile属性转JavaBean实战过程》本文介绍了在Java中使用ModelMapper库简化Shapefile属性转JavaBean的过程,对比... 目录前言一、原始的处理办法1、使用Set方法来转换2、使用构造方法转换二、基于ModelMapper

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

Java实战之自助进行多张图片合成拼接

《Java实战之自助进行多张图片合成拼接》在当今数字化时代,图像处理技术在各个领域都发挥着至关重要的作用,本文为大家详细介绍了如何使用Java实现多张图片合成拼接,需要的可以了解下... 目录前言一、图片合成需求描述二、图片合成设计与实现1、编程语言2、基础数据准备3、图片合成流程4、图片合成实现三、总结前