解决方案

Linux安全之SSL协议

seo靠我 2023-09-23 10:14:57

SSL(Secure Sockets Layer 安全套接字协议),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLSEO靠我S 与 SSL 在传输层与应用层之间对网络连接进行加密。

Linux安全之SSL协议

1. 密码学基础 密码算法和协议

对称加密

公钥加密

单向加密

认证协议

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

常见算SEO靠我

DES

3DES

AES

Blowfish

Twofish

IDEA

RC6

CAST5

特性

加密、解密使用同一个密钥

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

缺陷

密钥过多

密钥分发

1.2 公钥加密公钥加密:密钥是成SEO靠我对儿出现

常见算法

RSA

DSA

ELGamal

加密介绍

公钥

pubkey

公开给所有人

私钥

secret key

自己留存,必须保证其私密性

特点

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

1.3 单向SEO靠我加密 单向加密:只能解密,不能解密,提取数据指纹

算法

md5: 128bits

sha1: 160bits

sha224

sha256

sha384

sha512

特性

定长输出

雪崩效应

功能

完整性

1.4 PKI 和 SSEO靠我SL

PKI是Public Key Infrastructure首字母的一个缩写,表示公钥基础设施,主要是用于认证的。

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

现在我们使用的为ssl的第三版

PKI 中的SEO靠我相关角色

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库

X.509

版本号

序列号

签名算法ID

发行者名称

有效期限

主体名称

主体公钥

发行者惟一标识

主体的惟一标识

扩展

发行者签名

SSL 版本

SSL

:SeSEO靠我cure Socket Layer

TLS

:Transport Layer Security

SSL

TLS

SSL 的分层设计

最低层:

基础算法原语的实现

aes, rsa, md5

向上一层

各种算法的实现

再向上SEO靠我一层

组合算法实现的半成品

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

tls, ssh

Linux安全之SSL协议

2. OpenSSL

OpenSSL是一个强大的安全套接字层密码库,囊括主要的密码算法、常用SEO靠我的密钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。

OpenSSL功能强大,可以进行加解密

OpenSSL也可以进行PKI的认证机制

OpenSSL 有两种运行模式

交互模式

直接SEO靠我输入openssl回车进入交互模式

批处理模式

输入带命令选项的openssl进入批处理模式

2.1 openssl 的三个组件

openssl

多用途的命令行工具

libcrypto

公共加密库,实现了各种各样的SEO靠我加密算法

libssl

也是一个库,实现了ssl及tls

2.2 PKI 中的相关角色

签证机构:CA

注册机构:RA

证书吊销列表:CRL

证书存取库

2.3 证书申请及签署步骤

(1)生成申请请求,需要输出相关信息SEO靠我

(2)RA核验

(3)CA签署

(4)获取证书

2.4 创建私有 CA 的方法 实现工具

创建私有CA的专业开源工具OpenCA

创建私有CA的简要实现工具OpenSSL,这里选择后者

配置文件

这里以CentOS6SEO靠我中进行配置

openssl的配置文件:/etc/pki/tls/openssl.cnf

创建私有 CA 的步骤

(1) 创建所需要的文件

#服务器上配置

[root@localhost ~]# cd /etc/SEO靠我pki/CA

[root@localhost CA]# ls

certs crl newcerts private

[root@localhost CA]# touch index.txt; echo 01SEO靠我 > serial

[root@localhost CA]# ls

certs crl index.txt newcerts private serial

(2) CA 自签证书

bash

#服务器上配置

#()SEO靠我表示在子SHELL中运行,不会影响父SHELL的环境,这里生成秘钥对

#-new: 生成新证书签署请求

#-x509: 专用于CA生成自签证书

#-key: 生成请求时用到的私钥文件

#-days n: 证书SEO靠我的有效期限

#-out /PATH/TO/SOMECERTFILE: 证书的保存路径

#创建私钥文件

[root@localhost CA]# (umask 077; openssl genrsa -outSEO靠我 /etc/pki/CA/private/cakey.pem 2048)

Generating RSA private key, 2048 bit long modulus

…+++

…+++

e is 65SEO靠我537 (0x10001)

[root@localhost CA]# ls -l private/

总用量 4

-rw-------. 1 root root 1679 6月 26 11:35 cakey.SEO靠我pem

#生成CA自签证书,只有CA才可以自签署

#注意这里的Common Name必须和放置CA的主机名一致

[root@localhost CA]# openssl req -new -x509 -keSEO靠我y private/cakey.pem -days 7300 -out cacert.pem

You are about to be asked to enter information that wiSEO靠我ll be incorporated

into your certificate request.

What you are about to enter is what is called a DistSEO靠我inguished Name or a DN.

There are quite a few fields but you can leave some blank

For some fields therSEO靠我e will be a default value,

If you enter ‘.’, the field will be left blank.

-----

Country Name (2 letterSEO靠我 code) [XX]:CN

State or Province Name (full name) []:Beijing

Locality Name (eg, city) [Default City]:BSEO靠我eijing

Organization Name (eg, company) [Default Company Ltd]:wsescape

Organizational Unit Name (eg, seSEO靠我ction) []:Ops

Common Name (eg, your name or your server is hostname) []:ca.wsescape.com

Email Address SEO靠我[]:caadmin@wsecape.com

[root@localhost CA]# ls

cacert.pem certs crl index.txt newcerts private serial

(SEO靠我3) 给应用发证书

bash

#(a) 用到证书的主机生成证书请求

#客户端上配置

[root@localhost ~]# cd /etc/httpd/

[root@localhost httpd]# mkdiSEO靠我r ssl; cd ssl

#生成httpd的私钥文件httpd.key

[root@localhost ssl]# (umask 077; openssl genrsa -out /etc/httpd/SEO靠我ssl/httpd.key 2048)

#用httpd.key的私钥文件生成一个公钥文件httpd.csr

#这里填写的数据和服务器中的信息需要一致才可能够使用

[root@localhost ssl]# SEO靠我openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr

bash

#(b) 把请求文件SEO靠我传输给CA

#客户端上配置

#172.16.100.6为服务器CA地址

[root@localhost ssl]# scp httpd.csr root@172.16.100.6:/tmp/

bash

#© CSEO靠我A签署证书,并将证书发还给请求者

#服务器上配置

#172.16.100.9为客户端配置

[root@localhost ~]# openssl ca -in /tmp/httpd.csr -out /etSEO靠我c/pki/CA/certs/httpd.crt -days 365

[root@localhost ~]# scp /tmp/httpd.csr root@172.16.100.9:/etc/httpSEO靠我d/ssl/

#查看证书中的信息

[root@localhost ~]# openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-seriSEO靠我al

(4) 吊销证书

bash

#(a) 客户端获取要吊销的证书的serial

openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject

#(SEO靠我b) CA端执行以下步骤

#先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致

#吊销证书

openssl ca -revoke /etc/pki/CA/neSEO靠我wcerts/SERIAL.pem

#© 生成吊销证书的编号(第一次吊销一个证书)

echo 01 > /etc/pki/CA/crlnumber

#(d) 更新证书吊销列表

openssl ca -gencSEO靠我rl -out thisca.crl

#查看crl文件

openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text

2.5 PKI 的配置文件

bash

[rootSEO靠我@localhost ~]# cat /etc/pki/tls/openssl.cnf

########################################################SEO靠我############

[ ca ]

default_ca = CA_default # The default ca section

##################################SEO靠我##################################

[ CA_default ]

dir = /etc/pki/CA # Where everything is kept

certs = SEO靠我$dir/certs # Where the issued certs are kept

crl_dir = $dir/crl # Where the issued crl are kept

databaSEO靠我se = $dir/index.txt # database index file.

#unique_subject = no # Set to ‘no’ to allow creation of

# sSEO靠我everal ctificates with same subject.

new_certs_dir = $dir/newcerts # default place for new certs.

certSEO靠我ificate = $dir/cacert.pem # The CA certificate

serial = $dir/serial # The current serial number

crlnumSEO靠我ber = $dir/crlnumber # the current crl number

# must be commented out to leave a V1 CRL

crl = $dir/crlSEO靠我.pem # The current CRL

private_key = $dir/private/cakey.pem# The private key

RANDFILE = $dir/private/.SEO靠我rand # private random number file

x509_extensions = usr_cert # The extentions to add to the cert

#CommSEO靠我ent out the following two lines for the “traditional”

#(and highly broken) format.

name_opt = ca_defauSEO靠我lt # Subject Name options

cert_opt = ca_default # Certificate field options

#Extension copying option:SEO靠我 use with caution.

#copy_extensions = copy

#Extensions to add to a CRL. Note: Netscape communicator chSEO靠我okes on V2 CRLs

#so this is commented out by default to leave a V1 CRL.

#crlnumber must also be commenSEO靠我ted out to leave a V1 CRL.

#crl_extensions = crl_ext

default_days = 365 # how long to certify for

defauSEO靠我lt_crl_days = 30 # how long before next CRL

default_md = default # use public key default MD

preserve SEO靠我= no # keep passed DN ordering

3. OpenSSL 命令

分为三类

标准命令

消息摘要命令

加密命令

3.1 对称加密

要点

工具:openssl enc, gpg

算法:3des, SEO靠我aes, blowfish, twofish

enc命令

enc是openssl的一个子命令,可以用来实现对称加密

-e加密

-d解密

-salt表示添加杂质进去

-in需要加密或者解密的文件

-out需要输出的文SEO靠我件文件名称

这里的加密算法可以自己指定

使用方式

帮助信息

man enc

加密

openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext

解密

opSEO靠我enssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

实例展示

bash

[root@localhost tset]# cat mima

I SEO靠我love you

[root@localhost tset]# openssl enc -e -des3 -a -salt -in mima -out jiami

enter des-ede3-cbc eSEO靠我ncryption password:

Verifying - enter des-ede3-cbc encryption password:

[root@localhost tset]# cat jiaSEO靠我mi

U2FsdGVkX1+OK5GvMnyeZpST9ncIuIXU9zM+FzdKJmM=

[root@localhost tset]# openssl enc -d -des3 -a -salt -SEO靠我in jiami -out jiemi

enter des-ede3-cbc decryption password:

[root@localhost tset]# cat jiemi

I love youSEO靠我

3.2 单向加密

工具

md5sum

sha1sum

sha224sum

sha256sum

openssl dgst

dgst命令

要点

dgst命令是openssl的一个子命令,可以用来实现单向加密

帮助

man dgSEO靠我st

格式

openssl dgst -md5 /PATH/TO/SOMEFILE

实战演示

#这里可以指定-out保存到文件中

[root@localhost tset]# openssl dgst -md5SEO靠我 mima

MD5(mima)= ffa9b546d36ae095e2a4252a4981a942

3.3 单向加密的用途

单向加密可以实现下面三种方式的用途

(1)MAC 算法

特点

Message AutheSEO靠我ntication Code

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

机制

CBC-MAC

HMAC:使用md5或sha1算法

在集群中用于各节点之间认证的加密机制

(2)生成用户密SEO靠我

特点

使用openssl的子命令passwd实现

这里加-salt的加密密码就是Linux下给用户设置密码的机制相同

使用

帮助

man sslpasswd

格式

openssl passwd -1 -salt SEO靠我SALT

实战演示

#-1表示MD5

[root@localhost tset]# openssl passwd -1 -salt 123456

Password:

$1 123456 123456 12345SEO靠我6I.fsDBpqtKp/xeL5gqYrz/

(3)生成随机数

使用

帮助

man sslrand

格式

openssl rand [-base64|-hex] NUM

-base64表示-base64编码

-heSEO靠我x表示16进制编码

NUM: 表示输出的字节数,除以2就可以当密码啦

实战演示

[root@localhost tset]# openssl rand -base64 6

vZ8Qj7n1

[root@locaSEO靠我lhost tset]# openssl rand -base64 6

3Wh8exeQ

[root@localhost tset]# openssl rand -hex 6

a1c269b8b1fd

[roSEO靠我ot@localhost tset]# openssl rand -hex 6

58d677343fb7

3.4 公钥加密

公钥加密可以实现下面三种方式的用途

(1)加密和解密

算法

RSA

ELGamal

工具

gpSEO靠我g

openssl rsautl

(2)数字签名

算法

RSA

DSA

ELGamal

工具

一般没有必要自己生成

(3)密钥交换

算法

dh

随机数生成器

/dev/random

仅从熵池返回随机数

随机数用尽,阻塞

/dev/uSEO靠我random

从熵池返回随机数

随机数用尽,会利用软件生成伪随机数

非阻塞

实战演示

#生成密钥对儿,依赖于随机数生成器,需要修改生成的文件权限

openssl genrsa -out /PATH/TO/PRIVSEO靠我ATEKEY.FILE NUM_BITS

#提取出公钥

openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout

bash

#生成密钥对儿

[root@localhoSEO靠我st tset]# openssl genrsa -out rsakey.private 2048

Generating RSA private key, 2048 bit long modulus

…+SEO靠我++

…+++

e is 65537 (0x10001)

#需要修改生成的文件权限

#这里的括号表示在子SHELL中运行,由于在子shell中运行,所以本地的umask不会该表

[root@localhost SEO靠我tset]# (umask 077; openssl genrsa -out rsakey.private 2048)

Generating RSA private key, 2048 bit longSEO靠我 modulus

…+++

…+++

e is 65537 (0x10001)

#提取出公钥

[root@localhost tset]# openssl rsa -in rsakey.private -pubSEO靠我out

writing RSA key

-----BEGIN PUBLIC KEY-----

MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqHk7QIMJ2b1wSEO靠我79YnH+2D

5RSbRAG6SlFcoDCSbJkXoSewV59QqSxDD4Ctk3oYB5c/TxsbJV+F+2Y31KFgqdZz

qzaBP+u8cKTmGXiMaOgybrlU/1JxSEO靠我3+QGiQrLLsh73H/VC5//ymJBApRgeO4C+AWP

9Eytfn9cer5Ch0XdTsBjYgxV8BO1BrJCfqckdVmxhaIWzaJbPzqulM+sxLN6MNQNSEO靠我

eAclRMJCp+Sa8dx2amfpCKJS6RstdDh+jg6ryY6sbCAQwIQECBRGhODw1tWwatN4

mYd4RvQlMwovgef1Aaoh3Q/ZfFycF6o/Gx54SEO靠我VHoQmXdWfSM+JXX6MDvr/GPaBnxv

QQIDAQAB

-----END PUBLIC KEY-----

3.5 openssl 的命令帮助

#openssl的命令帮助

#标准命令

StandSEO靠我ard commands

asn1parse ca ciphers crl crl2pkcs7

dgst dh dhparam dsa dsaparam

ec ecparam enc engine errsSEO靠我tr

gendh gendsa genrsa nseq ocsp

passwd pkcs12 pkcs7 pkcs8 prime

rand req rsa rsautl s_client

s_server sSEO靠我_time sess_id smime speed

spkac verify version x509

#做信息摘要时候使用的算法,是做单向加密的

Message Digest commands (see SEO靠我the dgst command for more details)

md2 md4 md5 mdc2 rmd160

sha sha1

#支持的算法

Cipher commands (see the enc SEO靠我command for more details)

aes-128-cbc aes-128-ecb aes-192-cbc aes-192-ecb aes-256-cbc

aes-256-ecb baseSEO靠我64 bf bf-cbc bf-cfb

bf-ecb bf-ofb cast cast-cbc cast5-cbc

cast5-cfb cast5-ecb cast5-ofb des des-cbc

desSEO靠我-cfb des-ecb des-ede des-ede-cbc des-ede-cfb

des-ede-ofb des-ede3 des-ede3-cbc des-ede3-cfb des-ede3-SEO靠我ofb

des-ofb des3 desx rc2 rc2-40-cbc

rc2-64-cbc rc2-cbc rc2-cfb rc2-ecb rc2-ofb

rc4 rc4-40 rc5 rc5-cbc SEO靠我rc5-cfb

rc5-ecb rc5-ofb seed seed-cbc seed-cfb

seed-ecb seed-ofb

3.6 openssl 应用实例

(1)消息摘要算法应用例子

#用SHA1算法计SEO靠我算文件file.txt的哈西值,输出到stdout

openssl dgst -sha1 file.txt

#用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txt

openssl SEO靠我sha1 -out digest.txt file.txt

#用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin

#签名的private key必须为DSA算法产生的,SEO靠我保存在文件dsakey.pem中

openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt

#用dss1算法验证file.txt的数字签名SEO靠我dsasign.bin,

#验证的private key为DSA算法产生的文件dsakey.pem

openssl dgst -dss1 -prverify dsakey.pem -signature dSEO靠我sasign.bin file.txt

#用sha1算法为文件file.txt签名,输出到文件rsasign.bin

#签名的private key为RSA算法产生的文件rsaprivate.pem

opeSEO靠我nssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt

#用sha1算法验证file.txt的数字签名rsasign.bin,

#验证的publiSEO靠我c key为RSA算法生成的rsapublic.pem

openssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt

(2)对称加密SEO靠我应用例子

#对称加密应用例子

#用DES3算法的CBC模式加密文件plaintext.doc,

#加密结果输出到文件ciphertext.bin

openssl enc -des3 -salt -in plaSEO靠我intext.doc -out ciphertext.bin

#用DES3算法的OFB模式解密文件ciphertext.bin,

#提供的口令为trousers,输出到文件plaintext.doc

#注意SEO靠我:因为模式不同,该命令不能对以上的文件进行解密

openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass passSEO靠我:trousers

#用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取

#输出到文件ciphertext.bin

openssl bf-cfb -salt -SEO靠我in plaintext.doc -out ciphertext.bin -pass env:PASSWORD

#给文件ciphertext.bin用base64编码,输出到文件base64.txt

opSEO靠我enssl base64 -in ciphertext.bin -out base64.txt

#用RC5算法的CBC模式加密文件plaintext.doc

#输出到文件ciphertext.bin,

#sSEO靠我alt、key和初始化向量(iv)在命令行指定

openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9ESEO靠我DACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29

(3)Diffie-Hellman 应用例子

#使用生成因子2和随机的1024-bit的素数产生D0ffSEO靠我ie-Hellman参数

#输出保存到文件dhparam.pem

openssl dhparam -out dhparam.pem -2 1024

#从dhparam.pem中读取Diffie-Hell参数SEO靠我,以C代码的形式

#输出到stdout

openssl dhparam -in dhparam.pem -noout -C

(4)DSA 应用例子应用例子

#生成1024位DSA参数集,并输出到文件dsapaSEO靠我ram.pem

openssl dsaparam -out dsaparam.pem 1024

#使用参数文件dsaparam.pem生成DSA私钥匙,

#采用3DES加密后输出到文件dsaprivatekSEO靠我ey.pem

openssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem

#使用私钥匙dsaprivatekey.pem生成公钥匙,

#输出到dsapuSEO靠我blickey.pem

openssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem

#从dsaprivatekey.pem中读取私钥匙,SEO靠我解密并输入新口令进行加密,

#然后写回文件dsaprivatekey.pem

openssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 SEO靠我-passin

(5)RSA 应用例子

#产生1024位RSA私匙,用3DES加密它,口令为trousers,

#输出到文件rsaprivatekey.pem

openssl genrsa -out rsapSEO靠我rivatekey.pem -passout pass:trousers -des3 1024

#从文件rsaprivatekey.pem读取私匙,用口令trousers解密,

#生成的公钥匙输出到文件rSEO靠我sapublickey.pem

openssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem

#用SEO靠我公钥匙rsapublickey.pem加密文件plain.txt,

#输出到文件cipher.txt

openssl rsautl -encrypt -pubin -inkey rsapublickey.SEO靠我pem -in plain.txt -out cipher.txt

#使用私钥匙rsaprivatekey.pem解密密文cipher.txt,

#输出到文件plain.txt

openssl rsautlSEO靠我 -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt

#用私钥匙rsaprivatekey.pem给文件plain.txt签名SEO靠我

#输出到文件signature.bin

openssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin

#用SEO靠我公钥匙rsapublickey.pem验证签名signature.bin,

#输出到文件plain.txt

openssl rsautl -verify -pubin -inkey rsapublickeSEO靠我y.pem -in signature.bin -out plain

#从X.509证书文件cert.pem中获取公钥匙,

#用3DES加密mail.txt

#输出到文件mail.enc

openssl smSEO靠我ime -encrypt -in mail.txt -des3 -out mail.enc cert.pem

#从X.509证书文件cert.pem中获取接收人的公钥匙,

#用私钥匙key.pem解密S/SEO靠我MIME消息mail.enc,

#结果输出到文件mail.txt

openssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -oSEO靠我ut mail.txt

#cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,

#证书被包含在S/MIME消息中,输出到文件mail.sgn

openssl smime -siSEO靠我gn -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn

#验证S/MIME消息mail.sgn,输出到文件mail.txt

#签名者的证SEO靠我书应该作为S/MIME消息的一部分包含在mail.sgn中

openssl smime -verify -in mail.sgn -out mail.txt

文章作者: Escape

文章链接: httpsSEO靠我://www.escapelife.site/posts/48693f50.html
“SEO靠我”的新闻页面文章、图片、音频、视频等稿件均为自媒体人、第三方机构发布或转载。如稿件涉及版权等问题,请与 我们联系删除或处理,客服邮箱:html5sh@163.com,稿件内容仅为传递更多信息之目的,不代表本网观点,亦不代表本网站赞同 其观点或证实其内容的真实性。

网站备案号:浙ICP备17034767号-2