加密和解密技术



本章内容:

  • 安全机制

  • 对称加密

  • 不对称加密

  • 散列算法

  • PKI和CA



相关知识:

传输层协议:

TCP(面向连接),UDP(面向无连接),SCTP(流控协议)

port(端口):传输层协议都会提供端口,

  • 端口(port)是标记进程的地址,进程向内核注册才能使用某端口(独占)

  • 任何一个进程占领某个端口之后,其他进程进不能使用了;

同一主机上的进程间通信:

  • IPC,

  • message qoeue(消息队列)

  • shm(共享内存);

  • semerphor

不同主机间的进程通信:

  • 通过套接字方式来实现(socket)

  • cip:port<-- -->sip:port (客户端ip和端口到服务端ip和端口)

监听模式:LINTEN(ip:port),

  • 无论有没有人访问,它都要打开自己的进程,并监听在某个ip:port上,随时等待客户端请求;

  • 为某些众所周知的应用,事先分配好一个固定的端口(比如http的80端口)

SSL :Secure Socket Layer

  • http-->ssl-->https

  • http协议一但调用了ssl就变成了https,从而能够完成安全通信

SSL介绍

★SSL简介:

  • SSL 也就是Secure Socket Layer 叫做安全套接字协议,是一种应用层协议,主要用于数据传输的加密。OpeenSSL是SSL协议开源形式,是广泛使用的商业及SSL工具,同时OpeenSSL也是一种命令行工具;

★跨主机间的通信过程

  • 在计算机网络中,我们知道跨主机之间的进程通信是通过套接字方式实现的,服务器监听在某个TCP Socket之上(IP:Port),客户端在本地打开一个随机的Socket,然后通过TCP/IP协议,将请求通过交换机、路由器层层转发到目标服务器上,然后服务器可以判断出客户端请求的资源,进而转交到应用层相关服务上,服务端应用进程从磁盘上获得相应的资源信息,然后封装成相应的网络数据包格式以同样的方式层层传输给客户端对应的端口上。

  • 无论数据从应用层向下传输还是从下层到应用层传输,每个层次中的协议都仅仅是对数据进行封装解封装,而里面的数据本身并没有发生变化,所以,数据在发送过程当中是什么还是什么,也就是明文发送的,没有加密,任何人只要获取到了相关的数据包就能通过其他方法获知其中的铭文内容;因此就需要有一种加密机制能够保护互联网数据在传输过程中的隐秘性了;

NIST(美国国家标准与技术研究院)定义的安全属性:

  • 保密性:数据保密性,隐私性

  • 完整性(不可篡改):数据完整性,系统完整性

  • 可用性

***类型:

  • 威胁保密性的***:窃听、通信量分析 ;

  • 威胁完整性***:篡改,伪装,重放,否认;

  • 威胁可用性的***:拒绝服务(Dos)

解决方案:

安全机制:

  • 加密解密;

  • 数字签名;

  • 访问控制;

  • 数据完整性;

  • 认证交换;

  • 流量填充;

  • 路由控制;

  • 公证

安全服务:用于抵御***的服务

  • 认证服务;

  • 访问控制服务;

  • 数据保密性服务:连接保密性、无连接保密性、选择域保密性、流量保密性

  • 数据完整性服务;

  • 不可否认性服务;

设计原则:

  • 使用成熟的安全系统;

  • 以小人之心度输入数据;

  • 外部系统是不安全的;

  • 最小授权;

  • 减少外部接口;

  • 缺省使用安全模式;

  • 安全不是似是而非;

  • 从STRIDE思考;

  • 在入口处检查;

  • 从管理上保护好你的系统;

安全算法

常用安全技术

  • 认证

  • 授权

  • 安全通信

  • 审计

密码算法和协议:

  • 对称加密:数据加密(保密性)(算法:3DES,AES)

  • 公钥加密:身份认证,密钥交换,数据加密 (RSA,DSA)

  • 单向加密:数据完整性(MD5,SHA1...)

  • 密钥交换:RSA、DH、ECDH(椭圆曲线DH),ECDHE(临时椭圆曲线DH)

  • 认证协议

Linux系统:

  • OpenSSL,gpg(pgp协议的实现)

2.常见的加密算法和协议

 1.对称加密

对称加密:加密和解密使用同一个密钥

  • DES:Data Encryption Standard,56bits

  • 3DES:

  • AES:Advanced (128, 192, 256bits)

  • Blowfish,Twofish

  • IDEA,RC6,CAST5

特性:

  • 加密、解密使用同一个密钥,效率高;

  • 将原始数据分割成固定大小的块,逐个进行加密;

缺陷:

  • 密钥过多;

  • 密钥分发;

  • 数据来源无法确认

  2.非对称加密(公钥加密)

非对称加密

  采用公钥加密,同时还需要另一个秘钥来解密,也就是私钥;两者统称为密钥对。

  • 公钥:从私钥中提取产生,公开给所有人;public key

  • 私钥:通过工具创建,使用者自己留存,必须保证其私密性;secret key

特点:

  • 用公钥加密数据,只能使用与之配对的私钥解密;反之亦然

功能:

身份认证:

  • 私钥拥有者用自己的私钥加密的数据,只要用其公钥能解密,即可认证其身份;私钥加密的这个过程为数字签名。

密钥交换:

  • 与被通信方之前,首先获取到对方的公钥,自己生成一个加密密码,用对方的公钥加密,并发送给对方;

数据加密:

  • 适合加密较小数据(不常用,比对称加密要慢3个数量级)

缺点:

  • 密钥长,加密解密效率低下

算法:

  • RSA(加密,数字签名),

  • DSA(数字签名),

  • ELGamal

基于一对公钥/私钥对

  • 用密钥对中的一个加密,另一个解密

实现加密过程:

接收者

  • 生成公钥P和私钥S

  • 公开公钥P,保密私钥S

发送者

  • 使用接收者的公钥P来加密消息M

  • 将P(M)发送给接收者

接收者

  • 使用私钥S来解密:M=S(P(M))

实现数字签名:

发送者

  • 生成公钥/私钥对:P和S

  • 公开公钥P,保密密钥S

  • 使用私钥S来加密消息M

  • 发送给接收者S(M)

接收者

  • 使用发送者的公钥来解密M=P(S(M))

  • 结合签名和加密

  • 分离签名

 3.单向加密

单向加密

  • 只能加密,不能解密,因为解密过程是一个二次加密的过程;主要是提取数据的特征码,即“数据指纹”

特性:

  • 任意长度输入

  • 固定长度输出

  • 若修改数据,指纹也会改变(“不会产生冲突”)

  • 无法从指纹中重新生成数据(“单向”)

功能:

  • 数据完整性(完整性校验)

  • 系统账号密码校验

算法:

  • md5:Message Digest 5(消息摘要),128bits;

  • sha1:Secure Hash Algorithm 1(安全哈希算法) ,160bits

  • sha224,sha256,sha384,sha512

 4.密钥交换

密钥交换(IKE):

  双方通过交换密钥来实现数据加密解密;密钥交换有两种

公钥交换:

  • 将公钥加密后通过网络传输到对方进行解密,这种方式很有可能别截获破解,不常用;

DH:

  • 双方共有一些参数,共同协商加密算法,除此之外双方还有属于自己的私有参数,通过共有参数、私有参数和算法信息来进行加密,然后双方将计算后的结果进行交换,交换完成后再和属于自己私有的参数进行特殊算法,经过双反计算后的结果是相同的,而这个结果就是密钥。

举例:

注意:

  • 整个过程中对于第三方人员来说只能获取p,g两个值,AB双方交换的是经过计算后的值,因此这种加密算法是很安全的。

 5.一次加密通信过程:

发送者:

1.使用单向加密算法提取生成数据的特征码;  (单向加密技术)

2.使用自己的私钥加密特征码附在数据的后面;(公钥加密技术)

3.生成用于对称加密的临时密钥;

4.用此临时密钥加密数据和已经使用私钥加密后的特征码;(对称加密技术)

5.使用接收方的公钥加密此临时密钥,附在对称加密后的数据的后方;(密钥交换技术)

接收者:

1.使用自己的私钥解密加密的临时密钥,从而获取对称密钥;

2.使用对称密钥解密对称加密的 数据和私钥加密的特征码密文; 从而获取数据和特征码密文;

3.使用发送方的公钥解密特征码密文,从而获取计算生成的特征码;

4.使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的特征码进行比较。

 6.CA和证书

为什么需要CA

  • 在双方通信过程中,数据的加密解密依赖于对方的公钥,因此就需要一种可靠的机制能够保证公钥数据的安全性,这种机制就是CA,CA是一个证书颁发机构,这个机构负责证书的颁发,谁需要就去CA购买,买完之后去验证CA就可以了。

PKI: Public Key Infrastructure

CA只是PKI的一个组成部分,PKI(公钥基础设施:)包括

  • 签证机构:CA(Certificate Authority)

  • 注册机构:RA

  • 证书吊销列表:CRL

  • 证书存取库:

X.509:定义了证书的结构以及认证协议标准

  • 版本号:version

  • 序列号:serial number CA用于唯一标识此证书;

  • 签名算法标志:

  • 颁发者:即CA自己的名称;

  • 有效期限:两个日期,起始日期和终止日期

  • 主体名称:证书拥有者自己的名字

  • 主体公钥:证书拥有者自己的公钥信息

  • 发行者的唯一标识:

  • 证书主体的唯一标识

  • CRL分发点:

  • 扩展信息

  • 发行者签名:CA对此证书的数字签名

验证证书过程:

  • 用CA的公钥去解密CA的全名,能解密说明证书来源可靠;

  • 用同样的加密算法去加密证书取得特征码,与解密出的特征码相比较,如果二者相同,说明证书完整性可靠;

  • 检查证书的有效期限在不在当前合理的有效范围内;

  • 验证主体名称和期望通信的对方是否一致;

  • 检查证书是否被吊销。

证书类型:

  • 证书授权机构的证书

  • 服务器

  • 用户证书

获取证书两种方法:

使用证书授权机构;

  • 生成签名请求(csr)

  • 将csr发送给CA

  • 从CA处接收签名

自签名的证书;

  • 自已签发自己的公钥

SSL/TSL

 1.介绍

SSL: Secure Socket Layer

  • 安全套接层,是为网络通信提供安全及数据完整性的一种安全协议;

  • SSL为Netscape在1994年所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络之上传输过程中不会被截取及窃听;

TLS(传输层安全):

 Transport Layer Security(SSL的继承版本)与SSL在传输层对网络连接进行加密

发展历程:

  • 1995:SSL 2.0 Netscape研发

  • 1996: SSL 3.0

  • 1999: TLS 1.0 IETE研发

  • 2006: TLS 1.1 RFC(Request For Comments )4346

  • 2008:TLS 1.2 当前使用

  • 2015: TLS 1.3

功能:

  • 机密性,认证,完整性,重放保护;

分层设计:

  • 最底层:基础算法原语的实现;

  • 向上一层:各种算法的实现;

  • 再向上一层:组合算法实现的半成品;

  • 用各种组件拼装而成的各种成品密码及协议软件

两阶段协议,分为握手阶段和应用阶段

握手阶段(协商阶段):

  • 客户端和服务器端认证对方身份(依赖于PKI体系,利用数字证书进行身份认证),并协商通信中使用的安全参数、密码套件以及主密钥。后续通信使用的所有密钥都是通过MasterSecret生成。

应用阶段:

  • 在握手阶段完成后进入,在应用阶段通信双方使用握手阶段协商好的密钥进行安全通信。

附图:



 2.相关协议如下:

相关协议

Handshake协议:

  • 包括协商安全参数和密码套件、服务器身份认证(客户端身份认证可选)、密钥交换

ChangeCipherSpec 协议:

  • 一条消息表明握手协议已经完成

Alert 协议:

  • 对握手协议中一些异常的错误提醒,分为fatal和warning两个级别,fatal类型错误会直接中断SSL链接,而warning级别的错误SSL链接仍可继续,只是会给出错误警告

Record 协议:

  • 包括对消息的分段、压缩、消息认证和完整性保护、加密等

HTTPS 协议:

  • 就是“HTTP 协议”和“SSL/TLS 协议”的组合。HTTP over SSL”或“HTTP over TLS”,对http协议的文本数据进行加密处理后,成为二进制形式传输

 3.SSL会话主要三步:

SSL会话主要三步

  • 客户端向服务器端索要并验证证书;

  • 双方协商生成“会话密钥”

  • 双方采用“会话密钥”进行加密通信

※详细过程如下:

第一阶段:ClintHello(客户端发送加密通信请求)

  • 支持的协议版本,比如tls1.2

  • 客户端生成一个随机数,稍后用户生成“会话密钥”

  • 支持的加密算法:比如AES、RSA

  • 支持的压缩算法

第二阶段:ServerHello(服务器端回应)

  • 确认使用的加密通信版本,比如tls1.2;

  • 服务器端生成一个随机数,稍后用于生成“会话密钥”;

  • 确认使用的加密算法;

  • 发送服务器证书;

第三阶段:

  • 验证服务器证书,在确认无误后取其公钥;(发证机构、证书完整性、证书的持有者、证书有效期、吊销列表);

  • 发送以下信息给服务器:

  • 一个随机数;

  • 编码变更通知,表示随后的信息都将用双方商定的加密方法和;

  • 客户端握手结束通知;

第四阶段:

  • 收到客户端发来的第三个随机数pre-master-key后,计算生成本次会话所用到的“会话密钥”

附图:

 工作原理图:


Openssl

 1.介绍

OpenSSL:是ssl的开源项目,有三部分组成:

  • openssl: 多用途的命令行工具,每种功能都使专用的子命令来实现;

  • libcrypto: 加密,解密库文件;

  • libssl:加密模块应用库,实现了ssl及tls;

Openssl命令:

两种运行模式:

  • 交互模式;

  • 批处理模式;

opensslversion:程序版本号

子命令分类:

  • 标准命令:enc, ca, req, ...

  • 消息摘要命令(dgst命令)

  • 加密命令(enc子命令)

演示如下:

[root@centos7 ~]# openssl version  # 获取openssl 版本号
OpenSSL 1.0.1e-fips 11 Feb 2013
[root@centos7 ~]# openssl d
openssl:Error: 'd' is an invalid command.Standard commands   # 标准命令
asn1parse         ca                ciphers           cms
crl               crl2pkcs7         dgst              dh
dhparam           dsa               dsaparam          ec
ecparam           enc               engine            errstr
gendh             gendsa            genpkey           genrsa
nseq              ocsp              passwd            pkcs12
pkcs7             pkcs8             pkey              pkeyparam
pkeyutl           prime             rand              req
rsa               rsautl            s_client          s_server
s_time            sess_id           smime             speed
spkac             ts                verify            version
x509              Message Digest commands (see the `dgst' command for more details) # 信息摘要命令
md2               md4               md5               rmd160
sha               sha1              Cipher commands (see the `enc' command for more details) # 加密解密相关命令
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb
aes-256-cbc       aes-256-ecb       base64            bf
bf-cbc            bf-cfb            bf-ecb            bf-ofb
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb
camellia-256-cbc  camellia-256-ecb  cast              cast-cbc
cast5-cbc         cast5-cfb         cast5-ecb         cast5-ofb
des               des-cbc           des-cfb           des-ecb
des-ede           des-ede-cbc       des-ede-cfb       des-ede-ofb
des-ede3          des-ede3-cbc      des-ede3-cfb      des-ede3-ofb
des-ofb           des3              desx              idea
idea-cbc          idea-cfb          idea-ecb          idea-ofb
rc2               rc2-40-cbc        rc2-64-cbc        rc2-cbc
rc2-cfb           rc2-ecb           rc2-ofb           rc4
rc4-40            seed              seed-cbc          seed-cfb
seed-ecb          seed-ofb          zlib

Openssl命令

 1.对称加密:

工具:

  • openssl enc;

  • gpg

算法:

  • 3des;

  • aes;

  • blowfish;

  • twofish;

enc命令:man enc

加密:

  • openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher

解密:

  • openssl enc -d -des3 -a -salt -out testfile.cipher -in testfile

选项解析:

  • 其中,des3 为算法,in 后面的testfile 表示要加密和解密的文件,out后面的testfile.copher表示加密和解密后输出的文件名。

eopenssl enc命令演示:

[root@centos7 ~]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext #对文件fstab采用des3算法,加盐进行加密后生成fstab.ciphertext文件
enter des-ede3-cbc encryption password:
Verifying - enter des-ede3-cbc encryption password:[root@centos7 ~]# ls
anaconda-ks.cfg  Desktop  Documents  Downloads  fstab  fstab.ciphertext #加密后生层的文件  Music  Pictures  Public  Templates  Videos[root@centos7 ~]# cat fstab.ciphertext  # 查看加密后生成的文件
U2FsdGVkX1/CcyhhtaQx0TdJn9947LJAiFvCVaAHm20+RRoNlq50ogUFd3cnYTqH
n7W3TQqYVcQm0CKRpKY12FQWZRCvd6uTGYRDFnbraZcH+9gtrpE8K8YPo9bc4aXu
tjxwMufZD6YHcgFrbeN6z/R2M5ogmq0yLCveCwEq86cm02FGSX34/hudbYYF8Bml
pqzsGzjShkG3u22X5l4d7YPYB73a37UDIu/D98qSmVE3ehcITc8oI8YxZUV1/7rJ
GLJaoSmZmSqMEsVgOCarGnI47hYv6WIrf0sI6zRi0S7gwC35XtP1Alfhe1kj2a4n
nf0pkPo2wwtrt4esthEeYK5CpRo4vqVAQOwZbdnTZWHmWdzgMkR0/mtW8ZRF+jVy
d5jecgeUP8tmNSJRuliewdsAs6HyzFJeOH3NiYcEqZrraJne8P1vQ2G3zyfJyz6A
JOiJuD5CYbed2BqJSoS51Tjh9RDdA+UIwtySBipPYi3PYD26jErgbaFtN0lx5V2g
2hkEAvr3U+m88Ry4wg3qRuCam2VfKXRUOaIdraBFa76K3Ak0JPHGHUGGtL03J8Rf
cRpmfJySV/NS+cCHwbcb2GSDpophxAryBYHO555uo8Z0e1q1wJ6+p9G13TNp7lII
5A2HNlQplAVqMutR7RuFZJRnEHYV2+oPL0WEIZFPD8bJ+DDgVbEnkp/6RijePekV
gcROXMHKCy6pHul6cyfMKdTLXDezqjfSyr7Eshbyw7NOLme+/wotMKPKbCcz13aU
nuxbM4QaaiVq3zQQ8SYXvNBddqq10OuJkM9Fqb7m/E1yOE1d2S9A8g==[root@centos7 ~]# openssl enc -d -des3 -a -salt -out fstab.plaintext -in fstab.ciphertext #对生成的加密文件进行解密后生成fstab.plaintext文件
enter des-ede3-cbc decryption password:
[root@centos7 ~]# ls
anaconda-ks.cfg  Desktop  Documents  Downloads  fstab  fstab.ciphertext  fstab.plaintext  Music  Pictures  Public  Templates  Videos
[root@centos7 ~]# cat fstab.plaintext #
# /etc/fstab
# Created by anaconda on Tue Aug 30 09:45:37 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=90880561-dca2-447b-a935-4c47e1bd03d8 /                       xfs     defaults        0 0
UUID=219cc6c3-bd54-4bac-a47f-b498c491107f /boot                   xfs     defaults        0 0
UUID=409f2fa0-f642-4cc2-9ed7-b20bda111d8d /usr                    xfs     defaults        0 0
UUID=af279379-acbd-47f5-a814-870666bdd6d1 swap                    swap    defaults        0 0



 2.单向加密:

工具:

  • openssl dgst;

  • md5sum;

  • sha1sum;

  • sha224sum;

  • sha256sum…

dgst命令:man dgst

  • openssl dgst -md5 [-hex默认] /PATH/SOMEFILE

  • md5sum /PATH/TO/SOMEFILE

生成用户密码(passwd、openssl passwd)

  • passwd命令:man sslpasswd

  • openssl passwd -1 -salt SALT(最多8位) (-1表示md5加密算法)

MAC: Message Authentication Code,

单向加密的一种延伸应用,用于实现网络通信中保证所传输数据的完整性机制

  • CBC-MAC

  • HMAC:使用md5或sha1算法

生成随机数:man sslrand

  • openssl rand -base64|-hex NUM

  • NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2

命令演示:

[root@centos7 ~]# md5sum fstab  # 用md5sum工具单向加密
a6f9b86b73d17ac4a69d33583c0c5e96  fstab[root@centos7 ~]# openssl dgst -md5 fstab  # 用openssl dgst工具加密,指明算法
MD5(fstab)= a6f9b86b73d17ac4a69d33583c0c5e96
# 可以看到虽然两种加密的工具不一样,但算法相同,所以生成的特征码也相同

1.生成用户密码命令:

[root@centos7 ~]# openssl passwd -1 -salt 12345678  # 生成用户密码,salt最好用随机数
Password:
$1$12345678$TanElnkSiEcxWGxCzRxlf.[root@centos7 ~]# openssl passwd -1 -salt 12345679
Password:
$1$12345679$BSsViINNl3LW6h3yHWRs2/

2.生成随机数命令演示:

[root@centos7 ~]# openssl rand -base64 10
RrycEFwYSRKuUg==
[root@centos7 ~]# openssl rand -base64 10
QITPCPNvb6jsBQ==
[root@centos7 ~]# openssl rand -hex 10
97150eca6a7b1a3ef88f
[root@centos7 ~]# openssl rand -hex 10
3a5a7f7d7081ae310f49[root@centos7 ~]# openssl passwd -1 -salt `openssl rand -hex 4` # 命令替换生成随机数
Password:
$1$77309f38$BguLqZnBl/MCtf.C7YwK7/[root@centos7 ~]# openssl passwd -1 -salt $(openssl rand -hex 4)
Password:
$1$d66fe996$DmTPN4hBOhj9xNDoP9clw/
[root@centos7 ~]# openssl passwd -1 -salt b3d36557 # 只要随机数不变,则生成的密码就不变
Password:
$1$b3d36557$9nBLUPbdx6p2l3.lnX1vg.



 2.公钥加密:

加密解密

  • 算法:RSA, ELGamal

  • 工具:gpg, openssl rsautl(man rsautl)

数字签名

  • 算法:RSA, DSA, ELGamal

  • 工具同上

密钥交换

  • 算法:DH

  • DSA: Digital Signature Algorithm

  • DSS:Digital Signature Standard

  • RSA

=======================================================

生成密钥对(man genrsa)

生成私钥:

  • openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS 生成的的私钥不安全

  • (umask 077; openssl genrsa -out key.pri–des 2048)

  • 私钥仅自己能读能写,使用括号是启用了一个子shell,仅对子shell有效,对父shell不受影响;

从私钥中提取公钥:

  • openssl rsa -in /PATH/TO/SOMEFILE –pubout 

随机数生成器(伪随机数字)

熵池:

  • 在操作系统上有一个叫做熵池的地方,他是用来保存硬件中断产生的随机数(每一次硬件中断都会产生一个随机数)

/dev/random:

  • 仅从熵池中返回随机数,随机数耗尽时,取随机数的进程将会被阻塞;

/dev/unrandom:

  • 仅从熵池中取随机数,随机数耗尽时,就通过伪随机数生成器生成伪随机数;(伪随机数不安全)

熵池中随机数的来源

  • 硬盘IO中断时间间隔

  • 键盘IO中断时间间隔

演示:

1.生成私钥:

[root@centos7 ~]# openssl genrsa 1024
Generating RSA private key, 1024 bit long modulus
............++++++
.++++++
e is 65537 (0x10001)
-----BEGIN RSA PRIVATE KEY-----
MIICXAIBAAKBgQCb+FjWoo6+ajJVMBoroIMV0MufsQnjRQ5eTAFXjoDRTNsVjJ2h
aDVkhEQFFVJgOEx7xuZhvBeaB0dcFeDLm/bTTfGWHSg/i+oF+vJy9WKFt529pwrU
nMXgHJDzmgWD/rHlznfZEFSo2l3T7dnn3Mc++QMnVPFaK5To30O6x2JV6wIDAQAB
AoGAfW+u6veTe3pm/nIQKhQOOKZSjRzRyfEIzDeuQJ9/5FQ+QkdzopLvleZ12ey6
8l10zXs6X1HpXVwLPPjvcHD/gNGo4mDI4x1pqfvAXzmQYCdjmlBggT71JHrUE/QE
MMxYW099IPeDtNZBMqgXvKqF7l0/G7ZD5/3u/tq2ovJPtzkCQQDPMN0EF4hRAwZ3
pNZdGzyT8pokys3Q1wqR1N1++dM6kryGWjp8vFJWZdBzYQAtsvkIxsjnKOVtBXTH
WaYwA+69AkEAwLZ+cibegyqcbCNifEtMile4cfXhfMkcvI90wRtu3Pl1LbXwWLb6
s/w+l48mxBBFg9bGPI3OV8zPA4Wq6rtVxwJBAKcqyJg9mGmspDIyWBalHBpOmlnn
G2pNpqSE9/U0Al52+A76i8gKdfBpk2cUM32rskyHfp8rmvh8d31Ecta4xY0CQHbh
3Z0z5z6JUdfP+Fhu5zfMp4b9xO2C70xPPxpFfx2ociYRv8QqlPvlVwOOFr8Kvqd3
HfGLFUjKmsY0dly51k8CQFSjxS4jneZpEyHfRNKkz0IIQ6Hh5ulPtvv2QXNz/Cp7
eieQtiC17qSHLuiMMjtR0vK105L7MoaFo3iuVOn9jQ4=
-----END RSA PRIVATE KEY-----# 可以使用重定向到指定文件当中
[root@centos7 ~]# openssl genrsa 1024 > /tmp/mykey.private
Generating RSA private key, 1024 bit long modulus
........................++++++
..........................++++++
e is 65537 (0x10001)# -out指定输出的文件,和重定向作用相同
[root@centos7 ~]# openssl genrsa -out /tmp/mykey1.private 1024
Generating RSA private key, 1024 bit long modulus
...........................++++++
..........++++++
e is 65537 (0x10001)# 但是生成的私钥放在文件当中是不安全的,因此要设置权限尽量自己可以看
[root@centos7 ~]# (umask 077;openssl genrsa -out /tmp/mykey2.private 2048) # 设置文件权限
Generating RSA private key, 2048 bit long modulus
...........................................................+++
.....................................................................................................................................................+++
e is 65537 (0x10001)
[root@centos7 ~]# ls -l /tmp
total 12
-rw-r--r-- 1 root root  887 Sep 28 17:12 mykey1.private # 属组和其他用户也有读权限,不安全
-rw------- 1 root root 1675 Sep 28 17:14 mykey2.private # 属主有读写权限
-rw-r--r-- 1 root root  887 Sep 28 17:11 mykey.private  # 属组和其他用户也有读权限,不安全
drwx------ 3 root root   16 Sep 28 08:41 systemd-private-c7c1f3e358e34fc2add5b3729e413ed8-cups.service-KSESlC
drwx------ 3 root root   16 Sep 22 15:12 systemd-private-d276c273baee4a299b8d240ba604a5f2-cups.service-etgI6i

2.从私钥中提取公钥命令:

[root@centos7 ~]# openssl rsa -in /tmp/mykey2.private -pubout # 从私钥中提取公钥
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwh/Zuj32Ibnc8X9wd4bU
FgtMiIjPDu/STqlo311vspPHQ830Yytm5PjzVqAD4mUJ3/pHPGKHPWyP2KP1cZ4B
ZVLW4nsV37GUsD4X6d19AQ/cg94CP0HZgW26iFY1jjZy59/R/MyH23Bw9dK1TDkK
9pQrVqK+KSTE04MikGtTL0GaqPklMm0PgJ9ULnQWxpuYrlWR9jasfmQVEgUkKXr/
dMqb+lSDYjWNPeRc274KHVMbrafmqc24rPCLU/QSZ3qloTY9fI3MeSO2Lh2dhOel
q/dsVO27xkUnLTN+eC/BhjMrDwAw5Sj/xq0sb7+LVDKFpgyrZkltOTpZWbqNz7wx
2QIDAQAB
-----END PUBLIC KEY-----

   因为篇幅限制,后续内容Openssl创建CA和申请证书详见:

http://1992tao.blog.51cto.com/11606804/1879599

转载于:https://blog.51cto.com/1992tao/1856438

Linux之OpenSSL相关推荐

  1. openssl生成证书linux,linux中openssl生成证书和自签证书linux操作系统 -电脑资料

    下面来给大家介绍关于linux中openssl生成证书和自签证书的例子,整个过程都讲述的非常详细有兴趣的朋友可进入参考, 1.首先要生成服务器端的私钥(key文件):代码如下复制代码 openssl ...

  2. Linux下OpenSSL的安装与使用

    Linux下OpenSSL的安装与使用 OpenSSL简介 OpenSSL是一个SSL协议的开源实现,采用C语言作为开发语言,具备了跨平台的能力,支持Unix/Linux.Windows.Mac OS ...

  3. Linux 使用openssl ca方式签发证书

    前言 Linux 使用openssl x509方式签发证书(推荐用这种方式):https://blog.csdn.net/QianLiStudent/article/details/109818208 ...

  4. Linux 安装OpenSSL及解决遇到的问题

    OpenSSL 下载openssl安装包 解压 配置相应检查 编译安装 测试 创建软链接 N次测试 下载openssl安装包 wget https://www.openssl.org/source/o ...

  5. linux c openssl rsa 加解密

    1.PEM私钥文件格式 -----BEGIN RSA PRIVATE KEY----- -----END RSA PRIVATE KEY----- 生成该密钥的Linux命令:OpenSSL>g ...

  6. linux编译openssl报错,alpine编译openssl1.1.1g报错解决

    完整报错内容如下: crypto/mem_sec.c:33:13: fatal error: linux/mman.h: No such file or directory 33 | # includ ...

  7. Linux系统openssl测试指导,Linux管理员必用:OpenSSL服务器测试技巧

    测试IMAP服务器 测试IMAP服务器需要使用一套不同的命令.粗体的行同样是你输入的命令.为了简洁起见,我只摘了服务器输出的一部分: $ openssl s_client -connect mails ...

  8. linux升级openssl需要先卸载吗,linux下安装/升级openssl

    (2810)  (1) 安装环境: 操作系统:CentOs7 OpenSSL Version:openssl-1.0.2j.tar.gz 安装: 目前版本最新的SSL地址为 备注:进入http://w ...

  9. 【经验分享】linux交叉编译 - openssl动态库

    一.准备工作 1.到openssl官网下载最新版本openssl(如openssl-1.1.1d.tar.gz),上传到linux编译机上(如上传到目录/home/test下),并使用tar -xvf ...

最新文章

  1. js里父页面与子页面的相互调用
  2. MongoDB的下载与安装
  3. scala java抽象理解_Scala - 抽象类型和隐式参数解析
  4. 一起学windows phone7开发(二十二.使用系统资源)
  5. another mysql daemon,[守护进程详解及创建,daemon()使用
  6. 今年双11,阿里业务100%上云
  7. c语言的一些字符串库函数的自己实现
  8. 最简单的基于DirectShow的示例:视频播放器自定义版
  9. spring读取配置文件
  10. Java窗口点叉无法关闭解决方案
  11. Stata15 Unicode:一次性转码,解决中文乱码问题
  12. 五种无线通信协议及其特点
  13. 计算机应用基础免费文档课件,计算机应用基础的课件.doc
  14. 计算机专业助我成长作文600,挫折助我成长作文(精选6篇)
  15. ffmpeg 分辨率 压缩_ffmpeg——关于视频压缩
  16. Activiti7工作流引擎:进阶篇(十) 多实例
  17. 周志华教授力作,豆瓣10分好评,集成学习如何破解AI实践难题 | 赠书
  18. 日语二级语法汇总(part5/16)
  19. java实现老鼠迷宫游戏
  20. 互联网行业内卷的时代,12点前睡觉有错吗?

热门文章

  1. 放假看片时,一定要检查域名是不是 HTTPS ,不然……
  2. 听说又有兄弟因为用YYYY-MM-dd 被锤了...
  3. 分布式存储 Ceph 的演进经验 · SOSP 2019
  4. RabbitMQ 七战 Kafka,差异立现!
  5. 10个非常有趣的Linux命令
  6. 算法工程师的落地应用公开课
  7. 如何团队协作,代码托管?Git使用教程:最详细、最浅显、一文读懂Git常用操作!...
  8. 100%抄袭!ICLR 2022投稿竟公然剽窃两篇顶会,程序主席放「实锤」严词拒稿
  9. CV十年发展之观察:1.5万篇论文透视「业界」与「学界」,到底谁更胜一筹?...
  10. 最新!TUI世界大学排名(2021)发布:清华位居全球前20名!