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创建完毕,并签发了一个证书。在往后就是对证书的具体应用了。
        

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

无人机运营合格证:民用无人机驾驶航空器运营合格证书

无人机运营合格证是指经国家相关部门审核通过并颁发给相应无人驾驶航空器运营机构的一种资质证明。获得该证书的机构具备相关的技术和管理能力,能够安全、合规地运营无人驾驶航空器。 无人机运营合格证的申请流程一般包括报名、培训学习、考试准备、考试报名、考试…

无人机+垂直起降:微型共轴双旋翼无人机技术详解

微型共轴双旋翼无人机技术是一种独特的无人机设计,它结合了垂直起降(VTOL)能力和微型无人机的灵活性。这种设计允许无人机在无需跑道的情况下垂直起降,并具备在空中悬停和执行各种飞行动作的能力。 适用于集群控制,荷载…

华为OD机试【全量和已占用字符集】(java)(100分)

1、题目描述 给定两个字符集合,一个是全量字符集,一个是已占用字符集,已占用字符集中的字符不能再使用。 2、输入描述 输入一个字符串 一定包含,前为全量字符集 后的为已占用字符集;已占用字符集中的字符一定是全量…

1756jsp农产品销售管理系统Myeclipse开发mysql数据库C2C模式java编程计算机网页项目沙箱支付

一、源码特点 java 农产品销售管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发&#xff0…

压缩损失来源-量化噪声

压缩损失会以多种方式表现出来并会导致视觉损失。这里讨论最常见的压缩损失——量化噪声。量化是将大量输入值映射到较小集合的过程,如将输入值四舍五入为某个精度单位的值。 执行量化的设备或算法称为量化器。量化过程引入的舍入误差即量化误差或量化噪声。量化误差…

12个最强悍的数字孪生软件

数字孪生软件是一种尖端技术,可创建物理资产、系统或流程的虚拟表示。工程师、城市规划者、制造商和无数其他专业人士使用它来模拟、监控和分析数字环境中的真实场景。通过这样做,他们可以预测潜在问题、测试解决方案并简化操作,确保现实世界…

Linux网络编程(三)IO复用一 select系统调用

I/O复用使得程序能同时监听多个文件描述符。在以下场景中需要使用到IO复用技术: 客户端程序要同时处理多个socket,非阻塞connect技术客户端程序要同时处理用户输入和网络连接,聊天室程序TCP服务器要同时处理监听socket和连接socket服务器要同…

算法学习:数组 vs 链表

🔥 个人主页:空白诗 文章目录 🎯 引言🛠️ 内存基础什么是内存❓内存的工作原理 🎯 📦 数组(Array)📖 什么是数组🌀 数组的存储📝 示例代码&#…

运放的同相与反相放大

反相放大器 同相端接地,电压为 0,反相端和同相端虚短,因此也是 0 V 的电压,同时由于虚断,几乎没有电流注入,所以R 1 和R 2 相当于串联,电阻上的电流相等 因此可以求出输入输出关系式为 V o u t…

excel如何将多列数据转换为一列?

这个数据整理借用数据透视表也可以做到: 1.先将数据源的表头补齐,“姓名” 2.点击插入选项卡,数据透视表,在弹出对话框中,数据透视位置选择 现有工作表,(实际使用时新建也没有问题)…

免费分享一套微信小程序在线订餐(点餐)配送系统(SpringBoot+Vue),帅呆了~~

大家好,我是java1234_小锋老师,看到一个不错的微信小程序在线订餐(点餐)配送系统(SpringBootVue),分享下哈。 项目视频演示 【免费】微信小程序在线订餐(点餐)配送系统(SpringBootVue) Java毕业设计_哔哩哔哩_bilibili【免费】微信小程序在…

每日OJ题_贪心算法三⑥_力扣738. 单调递增的数字

目录 力扣738. 单调递增的数字 解析代码 力扣738. 单调递增的数字 738. 单调递增的数字 难度 中等 当且仅当每个相邻位数上的数字 x 和 y 满足 x < y 时&#xff0c;我们称这个整数是单调递增的。 给定一个整数 n &#xff0c;返回 小于或等于 n 的最大数字&#xff0…

集成学习案例-幸福感预测

集成学习案例一 &#xff08;幸福感预测&#xff09; 背景介绍 此案例是一个数据挖掘类型的比赛——幸福感预测的baseline。比赛的数据使用的是官方的《中国综合社会调查&#xff08;CGSS&#xff09;》文件中的调查结果中的数据&#xff0c;其共包含有139个维度的特征&#xf…

哪款充电宝质量和口碑比较好?适合入手充电宝有哪些?

充电宝这么好用的移动电源就不用我说了吧&#xff0c;平时不出门还好&#xff0c;家里有插座可以充电&#xff0c;但是但凡出门了&#xff0c;手机电量一般是不能够支撑到&#xff0c;像我这种手机重度使用者&#xff0c;出门在外手机快没电了我就非常焦虑了&#xff0c;有一款…

五一 大项目

Docker 中的 Nginx 服务为什么要启用 HTTPS 一安装容器 1 安装docker-20.10.17 2 安装所需的依赖 sudo yum install -y yum-utils device-mapper-persistent-data lvm23 添加Docker官方仓库 sudo yum-config-manager --add-repo https://download.docker.com/linux/centos…

Python pypdf库:PDF文档处理的利器

更多Python学习内容&#xff1a;ipengtao.com PDF&#xff08;Portable Document Format&#xff09;是一种常见的文档格式&#xff0c;广泛应用于各种场景&#xff0c;包括文档编辑、电子书籍、报告等。Python作为一种强大的编程语言&#xff0c;在处理PDF文档方面也有着丰富的…

怎样通过PHP语言实现远程控制一路开关

怎样通过PHP语言实现远程控制一路开关呢&#xff1f; 本文描述了使用PHP语言调用HTTP接口&#xff0c;实现控制一路开关&#xff0c;一路开关可控制一路照明、排风扇等电器。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi…

【JavaWeb】网上蛋糕项目商城-我的订单,退出功能

概念 上一文中&#xff0c;我们实现了注册&#xff0c;登录&#xff0c;提交订单以及修改个人信息等功能。本文在登录的状态下&#xff0c;实现订单列表以及退出登录功能等。 我的订单 在head.jsp头部页面中&#xff0c;当用户处于登录状态&#xff0c;则会显示“我的订单”…

面试分享——订单超30分钟未支付自动取消用什么实现?如何使用Redis实现延迟队列?

目录 1.订单超时未支付自动取消&#xff0c;这个你用什么方案实现&#xff1f; 2.如何使用Redis实现延迟队列 2.1实验步骤 2.2实现生产可用的延迟队列还需关注什么 3.总结 电商场景中的问题向来很受面试官的青睐&#xff0c;因为业务场景大家都相对更熟悉&#xff0c;相关…

Java | Leetcode Java题解之第75题颜色分类

题目&#xff1a; 题解&#xff1a; class Solution {public void sortColors(int[] nums) {int n nums.length;int p0 0, p2 n - 1;for (int i 0; i < p2; i) {while (i < p2 && nums[i] 2) {int temp nums[i];nums[i] nums[p2];nums[p2] temp;--p2;}i…