PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证

2024-02-09 20:44

本文主要是介绍PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • Openssl
  • 操系统默认的CA证书的公钥位置
  • Nginx Https 自签证书
  • Nginx Https 使用CA签发证书
  • 客户端使用自签证书供服务端验证
  • 客户端使用 根证书 签发客户端证书 供服务端验证

在这里插入图片描述


Openssl

https://www.openssl.net.cn/

openssl是一个功能丰富且自包含的开源安全工具箱。

它提供的主要功能有:

  • SSL协议实现(包括SSLv2、SSLv3和TLSv1)
  • 大量软算法(对称/非对称/摘要)
  • 大数运算
  • 非对称算法密钥生成
  • ASN.1编解码库
  • 证书请求(PKCS10)编解码
  • 数字证书编解码
  • CRL编解码
  • OCSP协议
  • 数字证书验证
  • PKCS7标准实现
  • PKCS12个人数字证书格式实现等功能

openssl采用C语言作为开发语言,这使得它具有优秀的跨平台性能。openssl支持Linux、UNIX、windows、Mac等平台。openssl目前最新的版本是0.9.8e.


操系统默认的CA证书的公钥位置

centos 下 被信任的证书在此文件中

/etc/pki/t1s/cert$/ca-bunde.crt

在这里插入图片描述


Nginx Https 自签证书

创建和配置 Nginx 使用 HTTPS 自签名证书的步骤如下:

  1. 生成自签名证书和私钥:

在这里插入图片描述

openssl genrsa -out server.key 2048

  • 该命令生成一个 RSA 密钥对,并将私钥保存到 server.key 文件中。参数 2048 指定了密钥长度为 2048 位。

openssl req -x509 -new -nodes -key server.key -subj "/CN=artisan.com" -days 10000 -out server.crt

  • 这个命令生成一个自签名的 X.509 证书。解释如下:
    • -x509:表示生成自签名证书。
    • -new:创建一个新的证书请求。
    • -nodes:不加密生成的私钥。
    • -key server.key:指定使用之前生成的私钥文件 server.key
    • -subj "/CN=yandun.com":指定证书的主题(Subject)。在这里,/CN=yandun.com 表示通用名称(Common Name)为 yandun.com
    • -days 10000:指定证书的有效期为 10000 天。
    • -out server.crt:将生成的证书保存到 server.crt 文件中。

openssl x509 -in server.crt -noout -text

  • 该命令用于查看生成的证书的详细信息,包括主题、颁发者、有效期等。解释如下:
    • -in server.crt:指定要查看的证书文件。
    • -noout:不打印证书内容到标准输出。
    • -text:以文本形式显示证书内容。

这些命令可以用来生成自签名的证书并查看证书的详细信息。

在这里插入图片描述


  1. 配置 Nginx 使用 HTTPS:

    编辑 Nginx 的配置文件(通常位于 /etc/nginx/nginx.conf/etc/nginx/sites-available/default),并确保以下配置项已经添加或更新:

 server {..........ss1 on;ss1_certificate /cert/server.crt;ss1_certificate_key /cert/server.key;#ss1_client_certificate /cert/client.crt;#ssI_verify_client on;ss1_session_cache shared:ssL:1m;ss1_session_timeout 10m;ss1_ciphers HIGH:!aNULL:!MD5;ss1_prefer_server_ciphers on; ..........}

每个指令的含义如下:

  1. ss1 on;

    • 启用 SSL/TLS 加密。这表示流模块将使用 SSL/TLS 加密来保护与客户端的通信。
  2. ss1_certificate /cert/server.crt;

    • 指定用于 SSL/TLS 加密的服务器证书文件路径。在这里,/cert/server.crt 是服务器证书的路径。
  3. ss1_certificate_key /cert/server.key;

    • 指定用于 SSL/TLS 加密的服务器私钥文件路径。在这里,/cert/server.key 是服务器私钥的路径。
  4. #ss1_client_certificate /cert/client.crt;

    • 用于指定客户端证书的文件路径。这是可选的,如果您希望服务器验证客户端的证书,则取消注释并指定客户端证书的路径。
  5. #ss1_verify_client on;

    • 用于指定是否验证客户端证书。取消注释并设置为 on 可以启用客户端证书验证。
  6. ss1_session_cache shared:ssL:1m;

    • 指定用于缓存 SSL/TLS 会话的共享内存区域名称和大小。在这里,会话缓存名称为 ssL,大小为 1MB。
  7. ss1_session_timeout 10m;

    • 指定 SSL/TLS 会话的超时时间。在这里,会话超时时间为 10 分钟。
  8. ss1_ciphers HIGH:!aNULL:!MD5;

    • 指定 SSL/TLS 加密算法的优先级和允许使用的加密套件。在这里,使用了 HIGH 表示使用高强度加密算法,同时禁用了一些不安全的加密套件,如 NULLMD5
  9. ss1_prefer_server_ciphers on;

    • 指定是否优先使用服务器端提供的加密套件。设置为 on 表示优先使用服务器端提供的加密套件。

这些指令配置了 Nginx 流模块的 SSL/TLS 加密功能,包括了服务器证书、私钥、会话缓存等参数。


  1. 重启 Nginx 服务:

    完成配置后,通过以下命令重启 Nginx 服务,以使更改生效:

    sudo systemctl restart nginx
    

现在,Nginx 应该已经配置为使用自签名证书进行 HTTPS 加密通信。请确保防火墙已正确配置以允许流量通过 HTTPS 端口(默认为 443)。

在这里插入图片描述


Nginx Https 使用CA签发证书

客户端使用自签证书供服务端验证

客户端使用 根证书 签发客户端证书 供服务端验证

这篇关于PKI - 借助Nginx 实现Https 服务端单向认证、服务端客户端双向认证的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

通过Spring层面进行事务回滚的实现

《通过Spring层面进行事务回滚的实现》本文主要介绍了通过Spring层面进行事务回滚的实现,包括声明式事务和编程式事务,具有一定的参考价值,感兴趣的可以了解一下... 目录声明式事务回滚:1. 基础注解配置2. 指定回滚异常类型3. ​不回滚特殊场景编程式事务回滚:1. ​使用 TransactionT

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

使用Python实现全能手机虚拟键盘的示例代码

《使用Python实现全能手机虚拟键盘的示例代码》在数字化办公时代,你是否遇到过这样的场景:会议室投影电脑突然键盘失灵、躺在沙发上想远程控制书房电脑、或者需要给长辈远程协助操作?今天我要分享的Pyth... 目录一、项目概述:不止于键盘的远程控制方案1.1 创新价值1.2 技术栈全景二、需求实现步骤一、需求

Spring Shell 命令行实现交互式Shell应用开发

《SpringShell命令行实现交互式Shell应用开发》本文主要介绍了SpringShell命令行实现交互式Shell应用开发,能够帮助开发者快速构建功能丰富的命令行应用程序,具有一定的参考价... 目录引言一、Spring Shell概述二、创建命令类三、命令参数处理四、命令分组与帮助系统五、自定义S

SpringBatch数据写入实现

《SpringBatch数据写入实现》SpringBatch通过ItemWriter接口及其丰富的实现,提供了强大的数据写入能力,本文主要介绍了SpringBatch数据写入实现,具有一定的参考价值,... 目录python引言一、ItemWriter核心概念二、数据库写入实现三、文件写入实现四、多目标写入

Android Studio 配置国内镜像源的实现步骤

《AndroidStudio配置国内镜像源的实现步骤》本文主要介绍了AndroidStudio配置国内镜像源的实现步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,... 目录一、修改 hosts,解决 SDK 下载失败的问题二、修改 gradle 地址,解决 gradle

SpringSecurity JWT基于令牌的无状态认证实现

《SpringSecurityJWT基于令牌的无状态认证实现》SpringSecurity中实现基于JWT的无状态认证是一种常见的做法,本文就来介绍一下SpringSecurityJWT基于令牌的无... 目录引言一、JWT基本原理与结构二、Spring Security JWT依赖配置三、JWT令牌生成与

SpringBoot实现微信小程序支付功能

《SpringBoot实现微信小程序支付功能》小程序支付功能已成为众多应用的核心需求之一,本文主要介绍了SpringBoot实现微信小程序支付功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作... 目录一、引言二、准备工作(一)微信支付商户平台配置(二)Spring Boot项目搭建(三)配置文件