当前位置: 首页 > news >正文

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

自建私有化证书颁发机构(Certificate Authority,CA)实战之 《0x01 Nginx 配置 https单向认证》

上一篇文章我们介绍了如何自建私有化证书颁发机构(Certificate Authority,CA),本篇文章我们将介绍如何使用自建的CA颁发的证书来配置Nginx的https单向认证。为了方便环境的搭建,以下使用docker来搭建nginx https 环境。

docker 环境的准备

主机环境:

ifconfig |grep inet
inet 127.0.0.1 netmask 0xff000000 
inet 192.168.1.12 netmask 0xffffff00 broadcast 192.168.1.255
inet 192.168.85.1 netmask 0xffffff00 broadcast 192.168.85.255
inet 192.168.22.1 netmask 0xffffff00 broadcast 192.168.22.255

当前主机有多个内网IP,我们可以用一张证书,包含多个IP,也可以用多张证书,每个IP对应一张证书。

这里我们使用单张证书的方式。计划包含的IP如下:

  • 127.0.0.1
  • 192.168.1.12
  • 192.168.85.1
  • 192.168.22.1

新建一个测试目录,创建3个文件夹及docker-compose.yml文件,命令如下:

mkdir {html,conf.d,ssl}
touch docker-compose.yml

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

其中目录分别为:

  • ./html 为nginx的静态资源目录
  • ./conf.d 为nginx的配置文件目录
  • ./ssl 为nginx的证书目录。

创建nginx的配置文件./conf.d/default.conf,内容如下:

server {listen       80; # 监听 80 端口listen 443 ssl;  # 监听 443 端口,用于SSLserver_name  _; # 默认主机名/域名,这里我们不设置域名,所以用下划线代替ssl_certificate ssl/web.crt; # 导出的证书ssl_certificate_key ssl/web.key; #导出的私钥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;}
}

创建nginx的静态资源文件./html/index.html,内容如下:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><title>nginx https 单向认证</title>
</head>
<body><h1>nginx https 单向认证</h1>
</body>
</html>

证书的准备

创建密钥

私钥 - 创建密钥 - 输入内部名称 - 确定

在这里插入图片描述

创建证书

证书-创建证书

来源

在这里插入图片描述

选中【使用此CA证书进行签名】,并在后面下拉框选择你创建的CA

在【使用模版创建新证书】的下拉框中,选择 [default] TLS_server

主体

在这里插入图片描述

在主体选项卡里,填上一些信息:

  • 内部名称:主要为了方便识别
  • [countryName] 国家:填写你所在的国家,这里我们填写 CN
  • [stateOrProvinceName] 省份:填写你所在的省份,这里我们填写 GuangXi
  • [localityName] 地区:填写你所在的地区,这里我们填写 Nanning
  • [organizationName] 组织:填写你所在的组织,这里我们填写 docker-nginx
  • [organizationalUnitName] 组织单位:填写你所在的组织单位,这里我们填写 docker-nginx
  • [commonName]通用名称:填写你的域名或者IP地址,这里我们填写 127.0.0.1,如果证书只针对单个域名或IP,填这里就够了。
  • [emailAddress] 电子邮件地址:填写你的邮箱地址,这里我们填写 taills@qq.com

在私钥下拉框中,选择我们上一步创建的私钥。

扩展

在这里插入图片描述

这里我们需要扩展所有的IP地址,设置如上图所示

IP:127.0.0.1, IP:192.168.1.12, IP:192.168.22.1, IP:192.168.85.1

如果想使用域名,就选择DNS类型。

密钥用法

在这里插入图片描述

选中 【TLS Web Server Authentication】,这里我们只需要用到这个。字面意思就是用于web服务器认证。

点击【确定】创建证书。

导出证书

在这里插入图片描述

选择我们创建的docker-nginx证书,点击【导出】,导出crt格式的证书。

在这里插入图片描述

相应的,我们导出名为docker-nginx的私钥,导出PEM private(*.pem)格式的私钥。
在这里插入图片描述

把导出的证书和私钥,放到我们的./ssl目录下。分别重命名为web.crtweb.key

其中:

  • web.crt 为证书
  • web.key 为私钥

启动nginx

docker-compose up

测试访问

用 https 协议访问,内容正常显示且浏览器地址栏显示上锁了,说明配置成功。

在这里插入图片描述

查看证书详情,可以看到证书的信息。

在这里插入图片描述

相关文章:

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

自建私有化证书颁发机构&#xff08;Certificate Authority&#xff0c;CA&#xff09;实战之 《0x01 Nginx 配置 https单向认证》 上一篇文章我们介绍了如何自建私有化证书颁发机构&#xff08;Certificate Authority&#xff0c;CA&#xff09;&#xff0c;本篇文章我们将介…...

《QT从基础到进阶·三十八》QWidget实现炫酷log日志打印界面

QWidget实现了log日志的打印功能&#xff0c;不仅可以在界面显示&#xff0c;还可以生成打印日志。先来看下效果&#xff0c;源码放在文章末尾&#xff1a; LogPlugin插件类管理log所有功能&#xff0c;它可以获取Log界面并能打印正常信息&#xff0c;警告信息和错误信息&…...

JVM的小知识总结

加载时jvm做了这三件事&#xff1a; 1&#xff09;通过一个类的全限定名来获取该类的二进制字节流 什么是全限定类名&#xff1f; 就是类名全称&#xff0c;带包路径的用点隔开&#xff0c;例如: java.lang.String。 即全限定名 包名类型 非限定类名也叫短名&#xff0c;就…...

深入理解JVM虚拟机第二十六篇:详解JVM当中的虚方法和非虚方法,并从字节码指令的角度去分析虚方法和非虚方法

😉😉 学习交流群: ✅✅1:这是孙哥suns和树哥给大家的福利! ✨✨2:我们免费分享Netty、Dubbo、k8s、Spring...应用和源码级别的视频资料 🥭🥭3:QQ群:583783824 📚​​​​​​​📚 微信:DashuDeveloper拉你进微信群,免费领取! 一:非虚方法和虚方法 方法…...

ElasticSearch的日志配置

ElasticSearch默认情况下使用Log4j2来记录日志&#xff0c;日志配置文件的路径为$ES_HOME/config/log4j2.properties&#xff0c;配置方法见Log4j2的官方文档。 参考path-settings&#xff0c;通过指定path.logs&#xff0c;可以指定日志文件的保存路径。 在日志配置文件$ES_…...

SQL Injection (Blind)`

SQL Injection (Blind) SQL Injection (Blind) SQL盲注&#xff0c;是一种特殊类型的SQL注入攻击&#xff0c;它的特点是无法直接从页面上看到注入语句的执行结果。在这种情况下&#xff0c;需要利用一些方法进行判断或者尝试&#xff0c;这个过程称之为盲注。 盲注的主要形式有…...

NX二次开发UF_CURVE_ask_trim 函数介绍

文章作者&#xff1a;里海 来源网站&#xff1a;https://blog.csdn.net/WangPaiFeiXingYuan UF_CURVE_ask_trim Defined in: uf_curve.h int UF_CURVE_ask_trim(tag_t trim_feature, UF_CURVE_trim_p_t trim_info ) overview 概述 Retrieve the current parameters of an a…...

linux的netstat命令和ss命令

1. 网络状态 State状态LISTENING监听中&#xff0c;服务端需要打开一个socket进行监听&#xff0c;侦听来自远方TCP端口的连接请求ESTABLISHED已连接&#xff0c;代表一个打开的连接&#xff0c;双方可以进行或已经在数据交互了SYN_SENT客户端通过应用程序调用connect发送一个…...

python:傅里叶分析,傅里叶变换 FFT

使用python进行傅里叶分析&#xff0c;傅里叶变换 FFT 的一些关键概念的引入&#xff1a; 1.1.离散傅里叶变换&#xff08;DFT&#xff09; 离散傅里叶变换(discrete Fourier transform) 傅里叶分析方法是信号分析的最基本方法&#xff0c;傅里叶变换是傅里叶分析的核心&…...

云原生系列Go语言篇-编写测试Part 2

基准测试 确定代码是快或慢非常复杂。我们不用自己计算&#xff0c;应使用Go测试框架内置的基准测试。下面来看​​第15章的GitHub代码库​​sample_code/bench目录下的函数&#xff1a; func FileLen(f string, bufsize int) (int, error) {file, err : os.Open(f)if err ! …...

CMake Error:No targets specified and no makefile found

在适用cmake构建项目的时候&#xff0c;突然遇到了这个报错 Make Error at CMakeLists.txt:1 (project): VERSION not allowed unless CMP0048 is set to NEW – Configuring incomplete, errors occurred! make: *** No targets specified and no makefile found. Stop. CMake…...

常见树种(贵州省):019滇白珠、杜茎山、苍山越桔、黄背越桔、贵州毛柃、半齿柃、钝叶柃、细枝柃、细齿叶柃木、土蜜树、山矾、胡颓子、檵木

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、滇白珠…...

java - 定时器

一、什么是定时器 定时器是指可以通过 Java 中的 Timer 类和 TimerTask 类所提供的功能来实现定期执行某些任务的工具。 标准库中提供了一个 Timer 类 . Timer 类的核心方法为 schedule . schedule 包含两个参数 . 第一个参数指定即将要执行的任务代码 , 第二个参数指定多…...

jQuery【菜单功能、淡入淡出轮播图(上)、淡入淡出轮播图(下)、折叠面板】(五)-全面详解(学习总结---从入门到深化)

目录 菜单功能 淡入淡出轮播图(上) 淡入淡出轮播图(下) 折叠面板 菜单功能 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><…...

攻防非对称问题| 当前企业面临的网络攻防非对称问题及其解决途径

随着信息技术的不断发展&#xff0c;网络已经成为我们日常生活和商业活动中不可或缺的一部分。然而&#xff0c;随之而来的是网络安全问题的不断升级。网络攻防非对称问题是当前亟待解决的一个复杂而严峻的挑战。其主要的表现是攻击成本远低于防御成本以及相同投入带来的攻击能…...

Java多线程二-线程安全

1、线程安全问题 多个线程&#xff0c;同时操作同一个共享资源的时候&#xff0c;可能会出现业务安全问题。 2、实例&#xff1a;取钱的线程安全问题 2.1、场景 小明和小红是夫妻&#xff0c;他们有个共同账户&#xff0c;余额是十万元&#xff0c;如果两人同时取钱并且各自取…...

Rust个人学习之结构体

第一反应&#xff0c;Rust结构体跟python的很像&#xff0c;不知道感觉对不对&#xff1b; 书中提到第一反应&#xff0c;Rust结构体跟python的很像&#xff0c;不知道感觉对不对&#xff1b; 书中提到&#xff1a;结构体是一种自定义数据类型&#xff0c;它允许命名多个相关的…...

kafka详细讲解与安装

Kafka是一种分布式流处理平台&#xff0c;具有高吞吐量、可扩展性和容错性。它最初由LinkedIn开发&#xff0c;现已成为Apache软件基金会的顶级项目。Kafka广泛应用于实时数据流处理、日志收集、消息队列等场景。 以下是关于Kafka的简要讲解和安装步骤&#xff1a; 一、Kafka…...

在我国干独立游戏开发有多难?

游戏独立开发在中国&#xff0c;一直以来都是一条充满挑战的道路。尽管有着无限的激情和创意&#xff0c;但面对市场、资金、政策等多方面的困难&#xff0c;许多独立开发者在这条路上艰难前行。 首先&#xff0c;市场竞争激烈是中国游戏独立开发者面临的首要挑战。随着游戏产…...

不可错过的网上宝藏:2023年必看的顶级资源大盘点!

亲爱的“AI uTools”读者们&#xff0c;大家好&#xff01; 在这个信息爆炸的时代&#xff0c;互联网上充满了无数的资源&#xff0c;但如何从这海量信息中挑选出真正有用的宝藏呢&#xff1f;今天&#xff0c;我为大家精心挑选了一系列优质网站资源&#xff0c;涵盖了从文本处…...

进程地址空间(比特课总结)

一、进程地址空间 1. 环境变量 1 &#xff09;⽤户级环境变量与系统级环境变量 全局属性&#xff1a;环境变量具有全局属性&#xff0c;会被⼦进程继承。例如当bash启动⼦进程时&#xff0c;环 境变量会⾃动传递给⼦进程。 本地变量限制&#xff1a;本地变量只在当前进程(ba…...

【解密LSTM、GRU如何解决传统RNN梯度消失问题】

解密LSTM与GRU&#xff1a;如何让RNN变得更聪明&#xff1f; 在深度学习的世界里&#xff0c;循环神经网络&#xff08;RNN&#xff09;以其卓越的序列数据处理能力广泛应用于自然语言处理、时间序列预测等领域。然而&#xff0c;传统RNN存在的一个严重问题——梯度消失&#…...

vue3 定时器-定义全局方法 vue+ts

1.创建ts文件 路径&#xff1a;src/utils/timer.ts 完整代码&#xff1a; import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

GC1808高性能24位立体声音频ADC芯片解析

1. 芯片概述 GC1808是一款24位立体声音频模数转换器&#xff08;ADC&#xff09;&#xff0c;支持8kHz~96kHz采样率&#xff0c;集成Δ-Σ调制器、数字抗混叠滤波器和高通滤波器&#xff0c;适用于高保真音频采集场景。 2. 核心特性 高精度&#xff1a;24位分辨率&#xff0c…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

WPF八大法则:告别模态窗口卡顿

⚙️ 核心问题&#xff1a;阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程&#xff0c;导致后续逻辑无法执行&#xff1a; var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题&#xff1a…...

springboot 日志类切面,接口成功记录日志,失败不记录

springboot 日志类切面&#xff0c;接口成功记录日志&#xff0c;失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

用js实现常见排序算法

以下是几种常见排序算法的 JS实现&#xff0c;包括选择排序、冒泡排序、插入排序、快速排序和归并排序&#xff0c;以及每种算法的特点和复杂度分析 1. 选择排序&#xff08;Selection Sort&#xff09; 核心思想&#xff1a;每次从未排序部分选择最小元素&#xff0c;与未排…...

当下AI智能硬件方案浅谈

背景&#xff1a; 现在大模型出来以后&#xff0c;打破了常规的机械式的对话&#xff0c;人机对话变得更聪明一点。 对话用到的技术主要是实时音视频&#xff0c;简称为RTC。下游硬件厂商一般都不会去自己开发音视频技术&#xff0c;开发自己的大模型。商用方案多见为字节、百…...