局域网https自签名教程

们的客户是在内网环境里面,所以就只能用自签名证书来搞,我一想这还不容易,就迅速的百度了一下随便找了个文章开始照猫画虎,很快就弄完了,但是弄完后发现还是有问题,而且https 还是报不安全,

1、基于nginx版本
1、证书生成

生成密钥,采用的是des3算法

openssl genrsa -des3 -out server.key 2048

根据密钥签发申请文件CSR

openssl req -new -key server.key -out server.csr
#这一步主要是去除密钥的密码,便于后续部署
openssl rsa -in server.key -out server.key 
#生成自签名根证书并设置证书的有效期,crt是发给客户端的证书
openssl x509 -req -days 3650 -in server.csr -signkey server.key  -out server.crt
#有的需要pem的证书,对证书做的转换
openssl x509 -in server.crt -out server.pem -outform PEM 

2、配置Nginx

server {listen 8080 ssl; #端口增加SSL支持server_name _;charset utf-8;# ssl on;ssl_certificate /data/app/nginx/nginx/cert/server.crt;# 证书文件ssl_certificate_key /data/app/nginx/nginx/cert/server.key; #私钥文件# access_log ./logs/access_stream.log main;# error_log ./logs/error_stream.log;location / {root /home/nginx/knowledge2.0/;index index.html;}error_page 500 502 503 504  /50x.html;location = /50x.html {root html;}
}

3、浏览器访问
使用https协议访问8080端口,但是会提示证书不可信,后面我们会详细讲解怎样解决这个问题。

对于浏览器提示证书不可信,由于采用的自签名证书,浏览器是没有我们的自签名证书导致。

4、证书不可信解决方案
生成证书时候增加ext.ini

extendedKeyUsage = serverAuth, clientAuth
basicConstraints = CA:FALSE
keyUsage = nonRepudiation,digitalSignature,keyEncipherment
subjectAltName = @alt_names[alt_names]
IP.1=172.1.0.1
DNS.1=www.test.com

然后重新使用Openssl重新生成证书,上述配置说明该证书是IP或者域名所有的:

openssl x509 -req -days 3650 -in server.csr -signkey server.key -out server.crt -extfile ext.ini
生成证书,然后导出crt证书,在windows下加入到信任的根证书下面,再次访问浏览器,浏览器访问不会报错
二、基于域名的https

证书相关文件格式说明
.key: 私钥文件
.pem: 根证书公钥
.crt: 域名证书公钥

自签名文件的生成过程
这里用的工具是openssl,怎么安装可以自行查一下

普通域名的自签名
我们以域名 td.todocoder.com为例

创建证书目录:/root/cert,进入/root/cert 创建 rootCA.key
$ openssl genrsa -des3 -out rootCA.key 2048
使用生成的密钥(rootCA.key)来创建新的根SSL证书。并将其保存为rootCA.pem,证书有效期为10年
$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.pem

输入第一步设置的密码

Enter pass phrase for rootCA.key:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:todocoderCA
Organizational Unit Name (eg, section) []:todocoderCA
Common Name (e.g. server FQDN or YOUR name) []:RootTodoCoder Cert
Email Address []:todocoder@github.com

这一行是把pem 转换成 crt格式

$ openssl x509 -outform der -in rootCA.pem -out rootCA.crt
提示填写的字段大多都可以直接回车过就行了,只要Common Name字段需要填写内容,这是生成跟证书后导入到系统的证书名称,我填的是RootTodoCoder Cert创建生成域名ssl证书的前置文件
在这里我生成一个 td.todocoder.com 的域名证书。创建一个td.ext文件,以创建一个X509 v3证书。注意我们指定了subjectAltName选项。cat >> td.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names[alt_names]
DNS.1 = td.todocoder.com
EOF
这里的 [alt_names] 域中即为我们需要指定的 subjectAltName,可以配置多个 IP,DNS 或其他值。生成域名ssl证书秘钥(tdtodocoder.csr、tdtodocoder.key)
$ openssl req -new -sha256 -nodes -out tdtodocoder.csr -newkey rsa:2048 -keyout tdtodocoder.keyCountry Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:todocoder
Organizational Unit Name (eg, section) []:todocoder
Common Name (e.g. server FQDN or YOUR name) []:td.todocoder.com
Email Address []:todocoder@github.com
A challenge password []:rootCA
An optional company name []:todocoder

这一步填写域名证书密钥需要的信息,会展示在浏览器的域名证书信息,其中最重要的是Common Name的内容,必须是对应需要https访问的域名的。

通过我们之前创建的根SSL证书颁发,创建出一个 test.testcloudide.com 的域名证书。输出是一个名为的证书文件ttestcloudide.crt(对应位置替换为自己的文件路径)

$ openssl x509 -req -in tdtodocoder.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out tdtodocoder.crt -days 500 -sha256 -extfile td.ext
以上,我们把域名 td.todocoder.com的证书已经创建好了,文件目录如下:.
├── rootCA.crt
├── rootCA.key
├── rootCA.pem
├── td.ext
├── tdtodocoder.crt
├── tdtodocoder.csr
└── tdtodocoder.key

接下来我们看一下,在nginx 和k8s中是如何用的。

nginx 配置域名td.todocoder.com的证书
我们拿到上面几步生成的 td.todocoder.com域名的文件,tdtodocoder.key、tdtodocoder.crt
配置到nginx的配置中

server {listen 443 ssl;# 以td.todocoder.com域名访问server_name td.todocoder.com;# 配置ssl域名证书ssl_certificate     [ssl证书路径]/tdtodocoder.crt;ssl_certificate_key [ssl证书路径]/tdtodocoder.key;index index.html index.php;# 反向代理需要被访问的本地服务location / {proxy_pass http://localhost:8080;}...}
自签名的域名访问需要配置host
vi /etc/hosts
192.168.111.37 td.todocoder.com

然后直接访问 td.todocoder.com 在浏览器上应该可以看到证书的信息,注意此时浏览器还提示的是证书无效,不安全。后面需要在操作系统信任一下证书就可以了。

如果你用的是k8s ,可以在ingress中配置

ingress配置tls证书
创建secret

$ kubectl -n todocoder create secret tls tdtodocoder-certs --key tdtodocoder.key --cert tdtodocoder.crt
# 重启ingress controller
$ kubectl rollout restart daemonset.apps/nginx-ingress-controller -n ingress-nginx
配置ingress yaml
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:name: ingress-todocodernamespace: todocoderannotations:nginx.ingress.kubernetes.io/ssl-redirect: "true"
spec:tls:- hosts:- "td.todocoder.com"secretName: tdtodocoder-certsingressClassName: nginxrules:- host: "td.todocoder.com"http:paths:- backend:service:name: todocoder-frontport:number: 8080path: /?(.*)pathType: ImplementationSpecific

以上,我们把域名 td.todocoder.com的证书已经创建好了,如果不创建泛域名的证书可以直接跳过泛域名的创建过程。接下来我们看一下泛域名证书的签名流程

泛域名的自签名
泛域名是域名前面的字符不是固定的,可能会根据id生成,比如,我的 id是:fsd423dsf234dsfs, 我自己的泛域名就是 fsd423dsf234dsfs.todocoder.com ,每个用户都可以有不同的域名。那么我们只需要配置 *.todocoder.com 这个域名就可以,具体操作流程如下:

从上面第3步开始,我们需要用同一个根证书签名,所以rootCA 的证书就不用再新建了

创建生成域名ssl证书的前置文件
创建一个fanym.ext文件, 注意我们指定了subjectAltName选项。

cat >> fanym.ext <<EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage=digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName=@alt_names[alt_names]
DNS.1 = *.todocoder.com
EOF

注意:这里的 域名配置的 *.todocoder.com

生成域名ssl证书秘钥(fantodocoder.csr、fantodocoder.key)

$ openssl req -new -sha256 -nodes -out fantodocoder.csr -newkey rsa:2048 -keyout fantodocoder.keyCountry Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Zhengzhou
Locality Name (eg, city) []:Zhengzhou
Organization Name (eg, company) [Internet Widgits Pty Ltd]:fantodocoder
Organizational Unit Name (eg, section) []:fantodocoder
Common Name (e.g. server FQDN or YOUR name) []:*.todocoder.com
Email Address []:todocoder@github.com
...
A challenge password []:rootCA
An optional company name []:fantodocoder

这一步填写域名证书密钥需要的信息,会展示在浏览器的域名证书信息,其中最重要的是Common Name的内容,必须是对应需要https访问的域名的。

通过我们之前创建的根SSL证书rootCA.pem, rootCA.key颁发,创建出一个 *.todocoder.com 的域名证书。输出是一个名为的证书文件fantodocoder.crt(对应位置替换为自己的文件路径)

$ openssl x509 -req -in fantodocoder.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out fantodocoder.crt -days 500 -sha256 -extfile fanym.extCertificate request self-signature ok
subject=C = CN, ST = Zhengzhou, L = Zhengzhou, O = fantodocoder, OU = fantodocoder, CN = *.todocoder.com, emailAddress = todocoder@github.com
Enter pass phrase for rootCA.key:
当前的目录结构:.
├── fantodocoder.crt
├── fantodocoder.csr
├── fantodocoder.key
├── fanym.ext
├── rootCA.crt
├── rootCA.key
├── rootCA.pem
├── td.ext
├── tdtodocoder.crt
├── tdtodocoder.csr
└── tdtodocoder.key
Nginx 配置
server {listen 443 ssl;server_name *.todocoder.com;
  # 配置ssl域名证书
     ssl_certificate     [ssl证书路径]/fantodocoder.crt;ssl_certificate_key [ssl证书路径]/fantodocoder.key;index index.html index.php;# 反向代理需要被访问的本地服务location / {proxy_pass http://localhost:8080;}...}

我们用泛域名 fsd423dsf234dsfs.todocoder.com访问,访问之前需要配置hosts

vi /etc/hosts
192.168.111.37 fsd423dsf234dsfs.todocoder.com
访问 fsd423dsf234dsfs.todocoder.com 可以看到我们刚刚的泛域名证书信息。

截止到这一步,我们的域名在nginx或者k8s端已经配置完成,我们想要的效果是在https 访问的时候,不报错,并且提示证书安全有效,那么需要我们在我们的操作系统上配置信任证书

各个系统下证书的信任流程
mac 下证书的添加方式
mac系统只需要添加 域名证书就可以,不用添加rootCA 证书

在mac下我们拿到证书后,双击tdtodocoder.crt文件->打开钥匙串->选择信任

然后重启浏览器再访问 td.todocoder.com,可以看到显示https 安全了

Windows下证书的添加方式
Windows 需要添加 rootCA 和域名的证书到系统里面

如果要访问 td.todocodoer.com 需要安装 rootCA.crt、tdtodocoder.crt 这两个证书

双击CA根证书->存储位置选择本地->指定证书位置(受信任的根证书颁发机构)

ubuntu下证书的添加方式
我的系统是Ubuntu 桌面版 22.04 的版本, ubuntu需要添加 rootCA 和域名的证书到系统里面

拷贝证书到ca证书的目录
$ sudo cp tdtodocoder.crt /usr/share/ca-certificates/mozilla/tdtodocoder.crt
$ sudo cp fantodocoder.crt /usr/share/ca-certificates/mozilla/fantodocoder.crt
$ sudo cp rootCA.crt /usr/share/ca-certifi
cates/mozilla/rootCA.crt
执行下面的命令按提示选中新添加的证书,确定(点回车) ,选中(点空格键)然后选 ”OK” 就行了
$ sudo dpkg-reconfigure ca-certificatesUpdating certificates in /etc/ssl/certs...
rehash: warning: skipping ca-certificates.crt,it does not contain exactly one certificate or CRL
rehash: warning: skipping rootCA.pem,it does not contain exactly one certificate or CRL
1 added, 0 removed; done.
正在处理用于 ca-certificates (20230311ubuntu0.22.04.1) 的触发器 ...
Updating certificates in /etc/ssl/certs...
0 added, 0 removed; done.
Running hooks in /etc/ca-certificates/update.d...
done.

点回车,点空格选中 -> 回车确定

就可以了.

火狐浏览器证书的添加方式
Chrome,safari,Edge等浏览器直接就可以访问了,但是火狐浏览器(ubuntu桌面版火狐,其他系统的没试)的话需要在设置里面添加跟证书。具体操作:

点击设置-> 搜索证书,点击查看证书 -> 证书颁发机构 -> 导入 -> rootCA.crt -> 编辑信任

可以看到,火狐浏览器已经显示安全

参考
https://mp.weixin.qq.com/s/Qi2pDCBJYGymLJxBIvqvqg

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/716428.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(规划)24届春招和25届暑假实习路线准备规划

春招&&暑假实习&#xff1a; 1.八股&#xff1a; 可以去一些八股网站上面进行阅读。 2.项目&#xff1a;至少准备1-2个项目&#xff0c;可以条理清晰的进行项目介绍和难点剖析。 3.算法&#xff1a; hot100 &#xff0c;剑指offer 能刷的很熟&#xff0c;算法关就差…

【R包报错】使用sceasy包转换rds文件与h5ad文件报错PyType_GetFlags

想要将scanpy的h5ad文件转为rds文件&#xff0c;有一个很方便的包sceasy可以使用&#xff0c;安装简单&#xff0c;代码简易。 安装方式 # bioconda package:conda install -c bioconda r-sceasy# R package:devtools::install_github("cellgeni/sceasy")#额外需要…

android系统开发之--ROM编译,repo使用指南

1、检出代码&#xff0c;指定git指定的分支和manifest repo init -u git://xxx/xxx/manifest.git -b <BRANCH> -m <MANIFEST> 这里-m和-b的含义是&#xff1a; 1. 注意到manifest.git本身也是一个git project 2. 所以&#xff0c;-b指定的是使用#1中这个git proj…

我的相关奖项

博士录取证明 名单第53&#xff1a;https://yzb.bupt.edu.cn/content/content.php?p2_2_651 论文链接 第一篇&#xff1a;https://doi.org/10.1186/s13677-022-00373-8 第二篇&#xff1a;https://doi.org/10.1016/j.ipm.2022.103167 第三篇&#xff1a;https://doi.org/10…

Unity 脚本-生命周期常用函数

在Unity中&#xff0c;万物皆是由组件构成的。 右键创建C&#xff03;脚本&#xff0c;拖动脚本到某物体的组件列表。 生命周期相关函数 using System.Collections; using System.Collections.Generic; using UnityEngine;// 必须要继承 MonoBehaviour 才是一个组件 // 类名…

matplotlib——散点图和条形图(python)

散点图 需求 我们获得北京2016年三月和十月每天白天最高气温&#xff0c;我们现在需要找出气温随时间变化的某种规律。 代码 # 导入库 from matplotlib import pyplot as plt import random# 解决中文乱码 import matplotlib matplotlib.rc("font",family"F…

【笔记】-编程语言以及应用领域

C/C 永远不会衰败的语言&#xff0c;适合偏底层&#xff0c;例如&#xff1a;Windows操作系统80%以上都是由C/C完成的&#xff0c;C/C也集成用于写应用层C/S架构的软件 JAVA 是真正的跨平台的语言 “一次编程&#xff0c;到处使用”Java适合应用层的开发&#xff0c;无论是…

Python的错误和异常

文章目录 python的语法错误异常异常处理用户自定义异常定义清理行为预定义的清理行为 python的语法错误 语法错误&#xff08;Syntax Error&#xff09;是指代码不符合Python语言的语法规则。当解释器在执行代码之前对其进行解析时&#xff0c;如果发现代码中有语法错误&#…

领域驱动设计(Domain-Driven Design DDD)——战略设计1

一、概述 随着系统的增长&#xff0c;它会越来越复杂&#xff0c;当我们无法通过分析对象来理解系统的时候&#xff0c;就需要掌握一些操纵和理解大模型的技术了。 最负雄心的企业欲实现一个涵盖所有业务、紧密集成的系统。因大型公司的业务模型巨大且复杂&#xff0c;很难把它…

2403d,d的108版本更改

原文 编译器更改 1,在object.d中给TypeInfo_Class添加了.nameSig字段 2,总是在调用点求值像__FILE__此类关键字 3,现在可按整数数组转换十六进制串 4,添加支持插值式序列 库更改 1,isForwardRange,isBidirectionalRange和isRandomAccessRange现在带可选元素类型 2,std.uni已…

K8s 镜像缓存管理 kube-fledged 认知

写在前面 博文内容为K8s 镜像缓存管理 kube-fledged 认知内容涉及&#xff1a; kube-fledged 简单介绍部署以及基本使用 理解不足小伙伴帮忙指正 不必太纠结于当下&#xff0c;也不必太忧虑未来&#xff0c;当你经历过一些事情的时候&#xff0c;眼前的风景已经和从前不一样了。…

springboot236基于springboot在线课程管理系统的设计与实现

基于SpringBoot在线课程管理系统的设计与实现 摘要 本文首先介绍了在线课程管理系统的现状及开发背景&#xff0c;然后论述了系统的设计目标、系统需求、总体设计方案以及系统的详细设计和实现&#xff0c;最后对在线课程管理系统进行了系统检测并提出了还需要改进的问题。本系…

Spring Data Redis 使用方式

在Java中操作Redis 1. 在Java中操作Redis1.1 Redis的Java客户端1.2 Spring Data Redis使用方式1.2.1 介绍1.2.1 环境搭建1.2.3 操作常见类型数据 1. 在Java中操作Redis 1.1 Redis的Java客户端 Redis 的 Java 客户端很多&#xff0c;常用的几种&#xff1a; JedisLettuceSpri…

关于Axios接口请求超时处理与重试的方法教程

在前端开发中&#xff0c;使用Axios作为HTTP客户端库进行接口请求是非常常见的做法。然而&#xff0c;在实际开发中&#xff0c;我们经常会遇到网络不稳定或服务器响应缓慢导致接口请求超时的情况。为了提高用户体验和程序的稳定性&#xff0c;我们需要实现接口请求超时的处理与…

UnityAPI的学习——Transform类

Transform类继承自Component类&#xff0c;并实现了IEnumberable接口。Transform是GameObject必须拥有得一个组件&#xff0c;用来管理所在GameObject对象的坐标位置、选择角度、和大小缩放。 Transform实现了IEnumberable接口&#xff0c;因此可以在程序中使用foreach()方法快…

echarts vue 动画效果的水球图、波浪图教程

1、安装插件 前提是已经安装了echarts&#xff08;我的版本是4.2.1&#xff09; npm install echarts-liquidfill --save 我安装了3.1.0版本的&#xff0c;结果运行时报错"TypeError: wave.ensureState is not a function" 原因&#xff1a;echarts版本和echarts-l…

miniconda3彻底删除虚拟环境

退出虚拟环境&#xff1a;确保您不在要删除的虚拟环境中。如果在&#xff0c;使用命令 conda deactivate 来退出当前激活的虚拟环境。查看虚拟环境列表&#xff1a;运行命令 conda env list 或 conda info -e 来查看所有存在的虚拟环境及其路径。删除虚拟环境&#xff1a;使用命…

在VMware中安装CentOS 7并配置Docker

VMware安装CentOS 7 一、介绍 该文章介绍如何使用启动U盘在虚拟机里面安装系统&#xff0c;虚拟机版本为VMware Workstation 16 pro&#xff0c;Linux版本为CentOS Linux release 7.9.2009 (Core)。 二、安装 1、创建虚拟机 点击创建新的虚拟机 选择典型就可以了&#xf…

前缀和算法题(区间次方和、小蓝平衡和、大石头的搬运工、最大数组和)

一、前缀和的原理和特点 prefix表示前缀和&#xff0c;前缀和由一个用户输入的数组生成。对于一个数组a[]&#xff08;下标从1开始&#xff09;&#xff0c;我们定义一个前缀和数组prefix[]&#xff0c;满足&#xff1a; prefix有一个重要的特性&#xff0c;可以用于快速生成p…

WordPress建站入门教程:如何安装本地WordPress网站运行环境?

有些站长想要搭建WordPress网站&#xff0c;又担心自己玩不转&#xff0c;白白浪费购买域名和主机空间的费用。像这种情况&#xff0c;最好的做法就是在自己电脑上安装一个WordPress网站运行环境&#xff0c;然后在本地电脑搭建WordPress&#xff0c;等熟悉掌握后再考虑购买域名…