Linux入门攻坚——22、通信安全基础知识及openssl、CA证书
Linux系统常用的加解密工具:OpenSSL,gpg(是pgp的实现)
加密算法和协议:
对称加密:加解密使用同一个秘钥;
DES:Data Encryption Standard,数据加密标准; ==> 3DES:
AES:Advanced Encryption Standard(128、192、256、384、512)
Blowfish、Twofish、IDEA、RC6、CAST
特性:
1、加密、解密使用同一个密钥;
2、将原始数据分割成固定大小的块,逐个进行加密;
缺陷:
1、秘钥过多;2、密钥分发;
公钥加密:密钥是成对出现
公钥:公开给所有人;pubkey
密钥:自己留存,必须保证其私密性;secret key
特点:公钥加密的数据,只能使用与之配对的私钥解密;反之亦然;
数字签名:让接收方确认发送方身份,发送发用私钥加密签名,接收方用公钥解密确认
秘钥交换:发送方用对方公钥加密对称密钥,发给对方
数据加密
算法:RSA、DSA、ELGamal
公钥交换使用数字证书,需要PKI支持。
单向加密:只能加密,不能解密:提取数据指纹;
特性:定长输出、雪崩效应;
算法:MD5(128bits)、sha1(160bits)、sha224、sha256、sha384、sha512
功能:完整性
密钥交换:IKE
公钥加密:
DH(Deffie-Hellman):
PKI:Public Key Infrastructure,公钥基础设施
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库:
X.509:定义了证书的结构以及认证协议标准
版本号:
序列号:
签名算法ID:
发行者名称:
有效期限:
主体名称:
主体公钥:
发行者唯一标识:
主体的唯一标识:
扩展信息:
发行者签名:
SSL:Secure Socket Layer
1995:SSL 2.0,Netscape
1996:SSL 3.0
1999:TLS 1.0,ISOC
2006:TLS 1.1 RFC 4346
2008:TLS 1.2
2015:TLS 1.3
SSL/TLS分层设计:
1、最底层:基础算法原语的实现,aes,rsa,md5
2、向上一层:各种算法的实现
3、再向上一层:组合算法实现的半成品
4、用各种组件拼装而成的种种成品密码学协议/软件:tls,ssh
OpenSSL:开源项目
三个组件:
openssl:多用途的命令行工具;
libcrypto:公共加密库;
libssl:库,实现了ssl及tls;
openssl命令:
openssl version:程序版本号
openssl命令分类:标准命令、消息摘要命令、加密命令
标准命令:enc、ca、req
对称加密:
工具:openssl enc,gpg
算法:3des,aes,blowfish,twofish
enc命令:
openssl enc -e -des3 -a -salt -in ./fstab -out fstab.ciphertext
openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab1
单向加密:
工具:md5sum,sha1sum,sha224sum,sha256sum,...,openssl dgst
dgst命令:openssl dgst -md5 -hex /PATH/TO/SOMEFILE
MAC:Message Authentication Code,单向加密的一种延伸应用,用于实现在网络通信中保证所传输的数据的完整性;
机制:CBC-MAC、HMAC:使用md5或sha1算法
生成用户密码:
openssl passwd -1 -salt 123456789
生成随机数:
openssl rand -base64|-hex num
公钥加密:
加密:
算法:RSA,ELGamal
工具:gpg,openssl rsautl
数字签名:
算法:RSA,DSA,ELGamal
密钥交换:
算法:dh
生成密钥(私钥):
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE numbits
随机数生成器:熵池,用于存储随机数,随机数是由随机事件产生的,如敲击键盘、磁盘I/o等,两个伪设备,用于生成随机数。在/dev下的random和urandom
/dev/random:仅从熵池中返回随机数,随机数用尽,阻塞
/dev/urandom:从熵池中返回随机数,随机数用尽,会利用软件生成伪随机数,非阻塞为了保证生成的私钥文件的安全,设置其读写权限:
(umask 077;openssl genrsa -out key.pri 2048)
使用小括号,运行的命令在子shell中运行,不会对当前的shell环境造成影响。
可以对私钥文件进行加密:
公钥的生成,是从私钥文件中提取的,需要私钥文件:
openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout -out /PATH/TO/PUB.FILE
默认输出到屏幕。输出到文件使用-out选项,如果是加密的私钥文件,需要输入密码
openssl实现私有CA:
1、生成一对密钥
2、生成自签署证书
openssl genrsa -out /PATH/TO/KEYPRIVATE.FILE NUMBITS
openssl rsa -in /PATH/TO/KEYPRIVATE.FILE -pubout
生成自签署证书和查看证书,用到req命令:
openssl req -new -x509 -key server1024.key -out server.crt -days 365
openssl x509 -text -in server.crt
实现私有CA,需要在特定目录下,有特定配置文件:
在/etc/pki/tls目录下,有openssl.cnf配置文件,对于自建CA,主要关注配置文件如下ca区域的配置和申请信息的配置[req]的配置:
####################################################################
[ ca ]
default_ca = CA_default # The default ca section####################################################################
[ CA_default ]dir = /etc/pki/CA # 相当于CA的根目录,Where everything is kept
certs = $dir/certs # 签发证书的保存目录,Where the issued certs are kept
crl_dir = $dir/crl # 证书吊销列表所在目录,Where the issued crl are kept
database = $dir/index.txt # 签发证书信息数据库,database index file.
#unique_subject = no # Set to 'no' to allow creation of# several ctificates with same subject.
new_certs_dir = $dir/newcerts # 新生成的证书保存位置,default place for new certs.certificate = $dir/cacert.pem # CA自己的证书,The CA certificate
serial = $dir/serial # 保存下一个证书序列号,The current serial number
crlnumber = $dir/crlnumber # 下一个吊销证书号码,the current crl number# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem # CA自己的私钥,The private key
RANDFILE = $dir/private/.rand # 随机数文件,private random number filex509_extensions = usr_cert # The extentions to add to the cert# Comment out the following two lines for the "traditional"
# (and highly broken) format.
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options# Extension copying option: use with caution.
# copy_extensions = copy# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
# so this is commented out by default to leave a V1 CRL.
# crlnumber must also be commented out to leave a V1 CRL.
# crl_extensions = crl_extdefault_days = 365 # 默认证书有效期,how long to certify for
default_crl_days= 30 # 吊销列表中保存时间,how long before next CRL
default_md = sha256 # 默认的加密算法,use SHA-256 by default
preserve = no # keep passed DN ordering# A few difference way of specifying how similar the request should look
# For type CA, the listed attributes must be the same, and the optional
# and supplied fields are just that :-)
policy = policy_match####################################################################
[ req ]
default_bits = 2048
default_md = sha256
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca # The extentions to add to the self signed cert# Passwords for private keys if not present they will be prompted for
# input_password = secret
# output_password = secret# This sets a mask for permitted string types. There are several options.
# default: PrintableString, T61String, BMPString.
# pkix : PrintableString, BMPString (PKIX recommendation before 2004)
# utf8only: only UTF8Strings (PKIX recommendation after 2004).
# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
# MASK:XXXX a literal mask value.
# WARNING: ancient versions of Netscape crash on BMPStrings or UTF8Strings.
string_mask = utf8only# req_extensions = v3_req # The extensions to add to a certificate request[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN # 默认的国家代码名字,原配置是XX,这里改为自己的
countryName_min = 2
countryName_max = 2stateOrProvinceName = State or Province Name (full name)
#stateOrProvinceName_default = ShanDong # 默认省名字Default Province,改为自己的localityName = Locality Name (eg, city)
localityName_default = JiNan # 默认城市(市县)名字,Default City0.organizationName = Organization Name (eg, company)
0.organizationName_default = MyComp # 默认公司名字,Default Company Ltd# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty LtdorganizationalUnitName = Organizational Unit Name (eg, section)
organizationalUnitName_default = Tech # 默认组织名称commonName = Common Name (eg, your name or your server\'s hostname) # 通用名称
commonName_max = 64emailAddress = Email Address
emailAddress_max = 64# SET-ex3 = SET extension number 3[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20unstructuredName = An optional company name
实操过程:
1、进入CA根目录,生成CA的私钥,按照上面的配置CA根目录是/etc/pki/CA,CA自己的私钥为/etc/pki/CA/private/cakey.pem
2、生成自签证书:按照上面配置文件,CA自己的证书位置和名称是/etc/pki/CA/cacert.pem。
3、创建目录架构,主要是CA下要有certs、crl、newcerts子目录,现在已经有了,就不需要创建。
4、创建证书索引文件index.txt和序列号文件serial,并要给serial一个起始号,因为没有吊销列表,吊销列表号文件crlnumber不必创建。
5、至此,CA就搭建完成,可以签发证书了
6、CA可以接收其他主机的证书签发申请文件,签发证书。这个证书签发申请文件,是RA机构,即注册机构主要工作的结果文件;
证书签发申请文件的生成,可以在其他主机上生成:假设给http服务器生成证书
1)http证书的位置,一般是在/etc/httpd下,新建一个ssl子目录
不同的服务,不同的证书,不同的密钥,使用者先向RA申请生成密钥。
2)生成证书签发申请文件,生成这个文件的过程,就是输入申请人信息的过程:
这个httpd.csr,就是一个待签发的证书,所谓签发,就相当于CA用自己的印戳在这个文件上盖上印,实际就是CA用自己的密钥在这个文件上数字签名。
3)这个httpd.csr发给CA,CA进行签发
查看CA的索引文件:
至此,私有CA创建完毕,并签发了一个证书。在往后就是对证书的具体应用了。
相关文章:

Linux入门攻坚——22、通信安全基础知识及openssl、CA证书
Linux系统常用的加解密工具:OpenSSL,gpg(是pgp的实现) 加密算法和协议: 对称加密:加解密使用同一个秘钥; DES:Data Encryption Standard,数据加密标准&…...

无障碍Web开发:遵循WCAG标准构建包容性用户体验
无障碍Web开发旨在确保所有用户,无论其身体条件或能力如何,都能轻松、有效地访问和使用Web内容。遵循Web Content Accessibility Guidelines (WCAG) 标准是实现这一目标的关键。以下是一些基于WCAG标准的无障碍Web开发实践,以构建更具包容性的…...

Isaac Sim 3(学习笔记5.8)
Isaac Sim 利用深度学习获取mask掩码图 参考内容 Kubernetes官网 在 Linux 系统中安装并设置 kubectl | Kubernetes准备开始 kubectl 版本和集群版本之间的差异必须在一个小版本号内。 例如:v1.30 版本的客户端能与 v1.29、 v1.30 和 v1.31 版本的控制面通信。 用…...

对象定义成final类型还能改变吗
如果一个Java对象被定义为final类型,那么它的引用不能被改变,但是对象本身的状态仍然可以被修改。这意味着你可以改变final对象的属性,但是不能将其引用指向另一个对象。 例如,下面的代码中,虽然person对象被声明为fi…...

Vue Router 路由hash和history模式
文章目录 hash和history模式区别Hash 模式History 模式 在 Vue 中,路由的两种主要模式是 hash 和 history,默认的路由模式是hash模式。。这两种模式决定了 URL 的外观以及浏览器如何处理 URL 的变化。 hash和history模式区别 特性Hash 模式History 模…...

【xrframe】优化ar相机中加载模型效果
方法一:定义渲染width和height //组件生命周期:在视图层布局完成后执行ready() {const info wx.getSystemInfoSync();//在小程序中同步获取系统信息const width info.windowWidth;//获取屏幕的宽度(单位为物理像素)const heigh…...

解决 SyntaxError: Unexpected token ‘.‘ 报错问题
这个报错一般是编译问题,浏览器的版本过低没通过代码 解决办法: 在package.json文件中加上这个 "browserslist": ["> 1%","last 2 versions","not dead","not ie < 6","Android > 4&…...

谷歌插件V3知识点
1.background.js与content.js与popup.js对比: background.js 生命周期:一开始就执行,最早执行且一直执行; 作用:放置全局的、需要一直运行的代码,权限非常高几乎调用所有Chrome api,还可以发起跨域请求; content.js 生…...

webrtc windows 编译,以及peerconnection_client
webrtc windows环境编译,主要参考webrtc官方文档,自备梯子 depot tools 安装 Install depot_tools 因为我用的是windows,这里下载bundle 的安装包,然后直接解压,最后设置到环境变量PATH。 执行gn等命令不报错&…...

geotrust企业通配符证书2990
随着时代的变化,人们获取信息的方式由报纸、书籍变为手机、电脑,因此很多企事业单位用户开始在互联网中创建网站来进行宣传,吸引客户。为了维护网站安全环境,保护客户数据,企事业单位也开始使用SSL数字证书,…...

网络安全科普:保护你的数字生活
# 网络安全科普:保护你的数字生活 ## 引言 在数字化时代,网络安全已成为每个人都必须面对的问题。从个人隐私保护到金融交易安全,网络的安全性直接关系到我们的日常生活。因此,普及网络安全知识,提高公众的网络安全意…...

Java实战:递归查找指定后缀名的文件
在日常的软件开发中,经常需要处理文件操作。假设我们有一个需求:从一个包含大量JSON文件的文件夹中提取出所有的JSON文件以进行进一步处理。本文将介绍如何利用Java编写一个高效的方法来递归查找指定后缀名的文件。 代码实现: import java.i…...

Linux 操作系统网络编程1
目录 1、网络编程 1.1 OSI 网络七层模型 1.1.1 OSI 参考模型 1.1.2 网络数据传输过程 2 传输层通信协议 2.1 TCP 2.1.1 TCP的3次握手过程 2.1.2 TCP四次挥手过程 2.2 UDP 3 网络编程的IP地址 4 端口 5 套接字 1、网络编程 1.1 OSI 网络七层模型 1.1.1 OSI 参考模型…...

future wait_for()成员、shared_future
future wait_for()成员 wait_for():等待其异步操作操作完成或者超出等待,用于检查异步操作的状态。wait_for()可以接受一个std::chrono::duration类型的参数,它表示等待的最大时间,会返回一个std::future_status枚举值࿰…...

C++ list介绍(迭代器失效)
一、常用接口 reverse逆置 sort排序(默认升序) 仿函数greater<int> merge合并,可以全部合并,也可以一部分合并 unique:去重(先排序,再去重) remove:删除e值&#…...

codeforces 1809C
很巧妙的构造 题目链接 题目大意 要求构造长度为 n n n的数组满足以下条件 任意 i i i, − 1000 < a [ i ] < 1000 -1000<a[i]<1000 −1000<a[i]<1000有 k k k个和为正数的子串其余子串和为负数 思路 我们发现与子数组内元素的和有关&…...

Nginx part3 创建一个https的网站
目录 HTTPS 公钥和密钥 加密解密方式: https搭建步骤 强调一下 1、准备环境 2、配置文件 3、制作证书 4、进行设置 HTTPS 啥是https,根据百度:HTTPS (全称:Hypertext Transfer Protocol Secure)&a…...

事件高级。
一、注册事件(绑定事件) 就是给元素添加事件 注册事件有两种方式:传统方式和方法监听注册方式 1 传统注册方式 方法监听注册事件 2、 addEventListener 事件监听方式 里面的事件类型是字符串,必定加引号,而且不带o…...

Vue从入门到实战Day04
一、组件的三大组成部分(结构/样式/逻辑) 1. scoped样式冲突 默认情况:写在组件中的样式会全局生效 -> 因此很容易造成多个组件之间的样式冲突问题。 1. 全局样式:默认组件中的样式会作用到全局 2. 局部样式:可以…...

Linux学习笔记:信号
信号 在Linux中什么是信号信号的产生方式硬件产生的信号软件产生的信号异常产生的信号 进程对信号的处理信号的保存信号方法更改函数signal信号处理的更改恢复默认信号忽略 信号的管理信号集 sigset_t对信号集的操作 信号的捕捉过程 在Linux中什么是信号 在 Linux 系统中&…...

C#中的隐式类型转换和显式类型转换
在C#中,类型转换分为隐式类型转换(Implicit Type Conversion)和显式类型转换(Explicit Type Conversion),也称为隐式转换和强制转换。 隐式类型转换(Implicit Type Conversion) 隐…...

linux上如何排查JVM内存过高?
在Linux上排查JVM内存过高的问题,可以采用以下几种方法: 1. **使用top命令查看进程**:通过top命令可以观察到系统中资源占用情况,包括CPU和内存。当收到内存过高的报警时,可以使用top命令来查看是哪个进程的内存使用率…...

第四届上海理工大学程序设计全国挑战赛 J.上学 题解 DFS 容斥
上学 题目描述 usst 小学里有 n 名学生,他们分别居住在 n 个地点,第 i 名学生居住在第 i 个地点,这些地点由 n−1 条双向道路连接,保证任意两个地点之间可以通过若干条双向道路抵达。学校则位于另外的第 0 个地点,第…...

word-排版文本基本格式
1、文本的基本格式:字体格式、段落格式 2、段落:word排版的基本控制单位 3、每敲一次回车,为一个段落标记,注意区分换行符和段落标记,换行符为指向下的箭头,段落标记为带拐弯的箭头,换行符&…...

目标检测YOLO实战应用案例100讲-无监督领域自适应目标检测方法研究与应用(五)
目录 多源无监督领域自适应目标检测方法 4.1研究现状及问题形成 4.2相关工作详述...

通过python实现Google的精准搜索
问题背景: 我想通过Google或者其他网站通过精准搜索确认该产品是否存在,但是即使该产品不存在Google也会返回一些相关的url链接,现在想通过python实现搜索结果的精准匹配以确认该产品是否为正确的名称【可以通过google搜索到,如果…...

Nios-II编程入门实验
文章目录 一 Verilog实现流水灯二 Nios实现流水灯2.1 创建项目2.2 SOPC添加模块2.3 SOPC输入输出连接2.4 Generate2.5 软件部分2.6 运行结果 三 Verilog实现串口3.1 代码3.2 引脚3.3 效果 四 Nios2实现串口4.1 sopc硬件设计4.2 top文件4.3 软件代码4.4 实现效果 五 参考资料六 …...

从0开始学python(七)
目录 前言 1 break、continue和pass函数 1.1 break 1.2 continue 1.3 pass 2、序列的索引及切片操作 2.1字符串的索引和切片 2.1.1 字符串索引 2.1.2 字符串切片 总结 前言 上一篇文章我们介绍了python中的循环结构,包括for和while的使用。本章接着往下讲。…...

【二叉树算法题记录】404. 左叶子之和
题目描述 给定二叉树的根节点 root ,返回所有左叶子之和。 题目分析 其实这题无论是迭代法还是递归法,最重要的是要明确判断左叶子的条件:当前节点有左孩子,且这个左孩子没有它的左孩子和右孩子。 迭代法 感觉只要二叉树相关…...

面试集中营—Spring篇
Spring 框架的好处 1、轻量:spring是轻量的,基本的版本大约2MB; 2、IOC:控制反转,Spring的IOC机制使得对象之间的依赖不再需要我们自己来控制了,而是由容易来控制,一个字:爽…...