龙空技术网

Linux安全之SSL协议

网络工程师郭主任 460

前言:

此刻咱们对“ssl协议的定义”都比较注意,咱们都想要知道一些“ssl协议的定义”的相关资讯。那么小编也在网上网罗了一些关于“ssl协议的定义””的相关文章,希望大家能喜欢,你们一起来了解一下吧!

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

Linux安全之SSL协议

1. 密码学基础

密码算法和协议

对称加密公钥加密单向加密认证协议1.1 对称加密

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

常见算法

DES3DESAESBlowfishTwofishIDEARC6CAST5

特性

加密、解密使用同一个密钥将原始数据分割成固定大小的块,逐个进行加密

缺陷

密钥过多密钥分发1.2 公钥加密

公钥加密:密钥是成对儿出现

常见算法

RSADSAELGamal

加密介绍

公钥pubkey公开给所有人私钥secret key自己留存,必须保证其私密性特点用公钥加密的数据,只能使用与之配对儿的私钥解密,反之亦然1.3 单向加密

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

算法

md5: 128bitssha1: 160bitssha224sha256sha384sha512

特性

定长输出雪崩效应

功能

完整性1.4 PKI 和 SSL

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

X.509定义了证书的结构以及认证协议标准现在我们使用的为ssl的第三版

PKI 中的相关角色

签证机构:CA注册机构:RA证书吊销列表:CRL证书存取库

X.509

版本号序列号签名算法ID发行者名称有效期限主体名称主体公钥发行者惟一标识主体的惟一标识扩展发行者签名

SSL 版本

**SSL**:Secure Socket Layer**TLS**:Transport Layer SecuritySSLTLS

SSL 的分层设计

最低层:基础算法原语的实现aes, rsa, md5向上一层各种算法的实现再向上一层组合算法实现的半成品用各种组件拼装而成的种种成品密码学协议/软件tls, ssh

Linux安全之SSL协议

2. OpenSSL

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

OpenSSL功能强大,可以进行加解密OpenSSL也可以进行PKI的认证机制

OpenSSL 有两种运行模式

交互模式直接输入openssl回车进入交互模式批处理模式输入带命令选项的openssl进入批处理模式2.1 openssl 的三个组件openssl多用途的命令行工具libcrypto公共加密库,实现了各种各样的加密算法libssl也是一个库,实现了ssltls2.2 PKI 中的相关角色签证机构:CA注册机构:RA证书吊销列表:CRL证书存取库2.3 证书申请及签署步骤(1)生成申请请求,需要输出相关信息(2)RA核验(3)CA签署(4)获取证书2.4 创建私有 CA 的方法

实现工具

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

配置文件

这里以CentOS6中进行配置openssl的配置文件:/etc/pki/tls/openssl.cnf

创建私有 CA 的步骤

(1) 创建所需要的文件

# 服务器上配置[root@localhost ~]# cd /etc/pki/CA[root@localhost CA]# lscerts  crl  newcerts  private[root@localhost CA]# touch index.txt; echo 01 > serial[root@localhost CA]# lscerts  crl  index.txt  newcerts  private  serial
(2) CA 自签证书

# 服务器上配置# ()表示在子SHELL中运行,不会影响父SHELL的环境,这里生成秘钥对# -new: 生成新证书签署请求# -x509: 专用于CA生成自签证书# -key: 生成请求时用到的私钥文件# -days n: 证书的有效期限# -out /PATH/TO/SOMECERTFILE: 证书的保存路径# 创建私钥文件[root@localhost CA]# (umask 077; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)Generating RSA private key, 2048 bit long modulus................................................................................................................................................+++.......+++e is 65537 (0x10001)[root@localhost CA]# ls -l private/总用量 4-rw-------. 1 root root 1679 6月  26 11:35 cakey.pem# 生成CA自签证书,只有CA才可以自签署# 注意这里的Common Name必须和放置CA的主机名一致[root@localhost CA]# openssl req -new -x509 -key private/cakey.pem -days 7300 -out cacert.pemYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:BeijingLocality Name (eg, city) [Default City]:BeijingOrganization Name (eg, company) [Default Company Ltd]:wsescapeOrganizational Unit Name (eg, section) []:OpsCommon Name (eg, your name or your server is hostname) []:ca.wsescape.comEmail Address []:caadmin@wsecape.com[root@localhost CA]# lscacert.pem  certs  crl  index.txt  newcerts  private  serial
(3) 给应用发证书

# (a) 用到证书的主机生成证书请求# 客户端上配置[root@localhost ~]# cd /etc/httpd/[root@localhost httpd]# mkdir ssl; cd ssl# 生成httpd的私钥文件httpd.key[root@localhost ssl]# (umask 077; openssl genrsa -out /etc/httpd/ssl/httpd.key 2048)# 用httpd.key的私钥文件生成一个公钥文件httpd.csr# 这里填写的数据和服务器中的信息需要一致才可能够使用[root@localhost ssl]# openssl req -new -key /etc/httpd/ssl/httpd.key -days 365 -out /etc/httpd/ssl/httpd.csr

# (b) 把请求文件传输给CA# 客户端上配置# 172.16.100.6为服务器CA地址[root@localhost ssl]# scp httpd.csr root@172.16.100.6:/tmp/

# (c) CA签署证书,并将证书发还给请求者# 服务器上配置# 172.16.100.9为客户端配置[root@localhost ~]# openssl ca -in /tmp/httpd.csr -out /etc/pki/CA/certs/httpd.crt -days 365[root@localhost ~]# scp /tmp/httpd.csr root@172.16.100.9:/etc/httpd/ssl/# 查看证书中的信息[root@localhost ~]# openssl x509 -in /PATH/FROM/CERT_FILE -noout -text|-subject|-serial
(4) 吊销证书

# (a) 客户端获取要吊销的证书的serialopenssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject# (b) CA端执行以下步骤# 先根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致# 吊销证书openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem# (c) 生成吊销证书的编号(第一次吊销一个证书)echo 01 > /etc/pki/CA/crlnumber# (d) 更新证书吊销列表openssl ca -gencrl -out thisca.crl# 查看crl文件openssl crl -in /PATH/FROM/CRL_FILE.crl -noout -text
2.5 PKI 的配置文件

[root@localhost ~]# cat /etc/pki/tls/openssl.cnf...####################################################################[ ca ]default_ca = CA_default     # The default ca section####################################################################[ CA_default ]dir = /etc/pki/CA     # Where everything is keptcerts = $dir/certs    # Where the issued certs are keptcrl_dir = $dir/crl    # Where the issued crl are keptdatabase = $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   # The CA certificateserial = $dir/serial            # The current serial numbercrlnumber = $dir/crlnumber      # the current crl number                                # must be commented out to leave a V1 CRLcrl = $dir/crl.pem   # The current CRLprivate_key = $dir/private/cakey.pem# The private keyRANDFILE = $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 optionscert_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 fordefault_crl_days = 30   # how long before next CRLdefault_md = default    # use public key default MDpreserve = no           # keep passed DN ordering...
3. OpenSSL 命令

分为三类

标准命令消息摘要命令加密命令3.1 对称加密

要点

工具:openssl enc, gpg算法:3des, aes, blowfish, twofish

enc命令

encopenssl的一个子命令,可以用来实现对称加密-e加密-d解密-salt表示添加杂质进去-in需要加密或者解密的文件-out需要输出的文件文件名称这里的加密算法可以自己指定

使用方式

帮助信息man enc加密openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext解密openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab

实例展示

[root@localhost tset]# cat mimaI love you[root@localhost tset]# openssl enc -e -des3 -a -salt -in mima -out jiamienter des-ede3-cbc encryption password:Verifying - enter des-ede3-cbc encryption password:[root@localhost tset]# cat jiamiU2FsdGVkX1+OK5GvMnyeZpST9ncIuIXU9zM+FzdKJmM=[root@localhost tset]# openssl enc -d -des3 -a -salt -in jiami -out jiemienter des-ede3-cbc decryption password:[root@localhost tset]# cat jiemiI love you
3.2 单向加密

工具

md5sumsha1sumsha224sumsha256sumopenssl dgst

dgst命令

要点dgst命令是openssl的一个子命令,可以用来实现单向加密帮助man dgst格式openssl dgst -md5 /PATH/TO/SOMEFILE

实战演示

# 这里可以指定-out保存到文件中[root@localhost tset]# openssl dgst -md5 mimaMD5(mima)= ffa9b546d36ae095e2a4252a4981a942
3.3 单向加密的用途

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

(1)MAC 算法

特点

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

机制

CBC-MACHMAC:使用md5sha1算法在集群中用于各节点之间认证的加密机制

(2)生成用户密码

特点

使用openssl的子命令passwd实现这里加-salt的加密密码就是Linux下给用户设置密码的机制相同

使用

帮助man sslpasswd格式openssl passwd -1 -salt SALT

实战演示

# -1表示MD5[root@localhost tset]# openssl passwd -1 -salt 123456Password:$1$123456$I.fsDBpqtKp/xeL5gqYrz/

(3)生成随机数

使用

帮助man sslrand格式openssl rand [-base64|-hex] NUM-base64表示-base64编码-hex表示16进制编码NUM: 表示输出的字节数,除以2就可以当密码啦

实战演示

[root@localhost tset]# openssl rand -base64 6vZ8Qj7n1[root@localhost tset]# openssl rand -base64 63Wh8exeQ[root@localhost tset]# openssl rand -hex 6a1c269b8b1fd[root@localhost tset]# openssl rand -hex 658d677343fb7
3.4 公钥加密

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

(1)加密和解密

算法RSAELGamal工具gpgopenssl rsautl

(2)数字签名

算法RSADSAELGamal工具一般没有必要自己生成

(3)密钥交换

算法dh

随机数生成器

/dev/random仅从熵池返回随机数随机数用尽,阻塞/dev/urandom从熵池返回随机数随机数用尽,会利用软件生成伪随机数非阻塞

实战演示

# 生成密钥对儿,依赖于随机数生成器,需要修改生成的文件权限openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS# 提取出公钥openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout

# 生成密钥对儿[root@localhost tset]# openssl genrsa -out rsakey.private 2048Generating RSA private key, 2048 bit long modulus................+++.................................+++e is 65537 (0x10001)# 需要修改生成的文件权限# 这里的括号表示在子SHELL中运行,由于在子shell中运行,所以本地的umask不会该表[root@localhost tset]# (umask 077; openssl genrsa -out rsakey.private 2048)Generating RSA private key, 2048 bit long modulus............................+++.......................................................................................................................................................+++e is 65537 (0x10001)# 提取出公钥[root@localhost tset]# openssl rsa -in rsakey.private -puboutwriting RSA key-----BEGIN PUBLIC KEY-----MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqHk7QIMJ2b1w79YnH+2D5RSbRAG6SlFcoDCSbJkXoSewV59QqSxDD4Ctk3oYB5c/TxsbJV+F+2Y31KFgqdZzqzaBP+u8cKTmGXiMaOgybrlU/1Jx3+QGiQrLLsh73H/VC5//ymJBApRgeO4C+AWP9Eytfn9cer5Ch0XdTsBjYgxV8BO1BrJCfqckdVmxhaIWzaJbPzqulM+sxLN6MNQNeAclRMJCp+Sa8dx2amfpCKJS6RstdDh+jg6ryY6sbCAQwIQECBRGhODw1tWwatN4mYd4RvQlMwovgef1Aaoh3Q/ZfFycF6o/Gx54VHoQmXdWfSM+JXX6MDvr/GPaBnxvQQIDAQAB-----END PUBLIC KEY-----
3.5 openssl 的命令帮助

# openssl的命令帮助# 标准命令Standard commandsasn1parse      ca             ciphers        crl            crl2pkcs7dgst           dh             dhparam        dsa            dsaparamec             ecparam        enc            engine         errstrgendh          gendsa         genrsa         nseq           ocsppasswd         pkcs12         pkcs7          pkcs8          primerand           req            rsa            rsautl         s_clients_server       s_time         sess_id        smime          speedspkac          verify         version        x509# 做信息摘要时候使用的算法,是做单向加密的Message Digest commands (see the dgst command for more details)md2            md4            md5            mdc2           rmd160sha            sha1# 支持的算法Cipher commands (see the enc command for more details)aes-128-cbc    aes-128-ecb    aes-192-cbc    aes-192-ecb    aes-256-cbcaes-256-ecb    base64         bf             bf-cbc         bf-cfbbf-ecb         bf-ofb         cast           cast-cbc       cast5-cbccast5-cfb      cast5-ecb      cast5-ofb      des            des-cbcdes-cfb        des-ecb        des-ede        des-ede-cbc    des-ede-cfbdes-ede-ofb    des-ede3       des-ede3-cbc   des-ede3-cfb   des-ede3-ofbdes-ofb        des3           desx           rc2            rc2-40-cbcrc2-64-cbc     rc2-cbc        rc2-cfb        rc2-ecb        rc2-ofbrc4            rc4-40         rc5            rc5-cbc        rc5-cfbrc5-ecb        rc5-ofb        seed           seed-cbc       seed-cfbseed-ecb       seed-ofb
3.6 openssl 应用实例(1)消息摘要算法应用例子

# 用SHA1算法计算文件file.txt的哈西值,输出到stdoutopenssl dgst -sha1 file.txt# 用SHA1算法计算文件file.txt的哈西值,输出到文件digest.txtopenssl sha1 -out digest.txt file.txt# 用DSS1(SHA1)算法为文件file.txt签名,输出到文件dsasign.bin# 签名的private key必须为DSA算法产生的,保存在文件dsakey.pem中openssl dgst -dss1 -sign dsakey.pem -out dsasign.bin file.txt# 用dss1算法验证file.txt的数字签名dsasign.bin,# 验证的private key为DSA算法产生的文件dsakey.pemopenssl dgst -dss1 -prverify dsakey.pem -signature dsasign.bin file.txt# 用sha1算法为文件file.txt签名,输出到文件rsasign.bin# 签名的private key为RSA算法产生的文件rsaprivate.pemopenssl sha1 -sign rsaprivate.pem -out rsasign.bin file.txt# 用sha1算法验证file.txt的数字签名rsasign.bin,# 验证的public key为RSA算法生成的rsapublic.pemopenssl sha1 -verify rsapublic.pem -signature rsasign.bin file.txt
(2)对称加密应用例子

# 对称加密应用例子# 用DES3算法的CBC模式加密文件plaintext.doc,# 加密结果输出到文件ciphertext.binopenssl enc -des3 -salt -in plaintext.doc -out ciphertext.bin# 用DES3算法的OFB模式解密文件ciphertext.bin,# 提供的口令为trousers,输出到文件plaintext.doc# 注意:因为模式不同,该命令不能对以上的文件进行解密openssl enc -des-ede3-ofb -d -in ciphertext.bin -out plaintext.doc -pass pass:trousers# 用Blowfish的CFB模式加密plaintext.doc,口令从环境变量PASSWORD中取# 输出到文件ciphertext.binopenssl bf-cfb -salt -in plaintext.doc -out ciphertext.bin -pass env:PASSWORD# 给文件ciphertext.bin用base64编码,输出到文件base64.txtopenssl base64 -in ciphertext.bin -out base64.txt# 用RC5算法的CBC模式加密文件plaintext.doc# 输出到文件ciphertext.bin,# salt、key和初始化向量(iv)在命令行指定openssl rc5 -in plaintext.doc -out ciphertext.bin -S C62CB1D49F158ADC -iv E9EDACA1BD7090C6 -K 89D4B1678D604FAA3DBFFD030A314B29
(3)Diffie-Hellman 应用例子

# 使用生成因子2和随机的1024-bit的素数产生D0ffie-Hellman参数# 输出保存到文件dhparam.pemopenssl dhparam -out dhparam.pem -2 1024# 从dhparam.pem中读取Diffie-Hell参数,以C代码的形式# 输出到stdoutopenssl dhparam -in dhparam.pem -noout -C
(4)DSA 应用例子应用例子

# 生成1024位DSA参数集,并输出到文件dsaparam.pemopenssl dsaparam -out dsaparam.pem 1024# 使用参数文件dsaparam.pem生成DSA私钥匙,# 采用3DES加密后输出到文件dsaprivatekey.pemopenssl gendsa -out dsaprivatekey.pem -des3 dsaparam.pem# 使用私钥匙dsaprivatekey.pem生成公钥匙,# 输出到dsapublickey.pemopenssl dsa -in dsaprivatekey.pem -pubout -out dsapublickey.pem# 从dsaprivatekey.pem中读取私钥匙,解密并输入新口令进行加密,# 然后写回文件dsaprivatekey.pemopenssl dsa -in dsaprivatekey.pem -out dsaprivatekey.pem -des3 -passin
(5)RSA 应用例子

# 产生1024位RSA私匙,用3DES加密它,口令为trousers,# 输出到文件rsaprivatekey.pemopenssl genrsa -out rsaprivatekey.pem -passout pass:trousers -des3 1024# 从文件rsaprivatekey.pem读取私匙,用口令trousers解密,# 生成的公钥匙输出到文件rsapublickey.pemopenssl rsa -in rsaprivatekey.pem -passin pass:trousers -pubout -out rsapubckey.pem# 用公钥匙rsapublickey.pem加密文件plain.txt,# 输出到文件cipher.txtopenssl rsautl -encrypt -pubin -inkey rsapublickey.pem -in plain.txt -out cipher.txt# 使用私钥匙rsaprivatekey.pem解密密文cipher.txt,# 输出到文件plain.txtopenssl rsautl -decrypt -inkey rsaprivatekey.pem -in cipher.txt -out plain.txt# 用私钥匙rsaprivatekey.pem给文件plain.txt签名,# 输出到文件signature.binopenssl rsautl -sign -inkey rsaprivatekey.pem -in plain.txt -out signature.bin# 用公钥匙rsapublickey.pem验证签名signature.bin,# 输出到文件plain.txtopenssl rsautl -verify -pubin -inkey rsapublickey.pem -in signature.bin -out plain# 从X.509证书文件cert.pem中获取公钥匙,# 用3DES加密mail.txt# 输出到文件mail.encopenssl smime -encrypt -in mail.txt -des3 -out mail.enc cert.pem# 从X.509证书文件cert.pem中获取接收人的公钥匙,# 用私钥匙key.pem解密S/MIME消息mail.enc,# 结果输出到文件mail.txtopenssl smime -decrypt -in mail.enc -recip cert.pem -inkey key.pem -out mail.txt# cert.pem为X.509证书文件,用私匙key,pem为mail.txt签名,# 证书被包含在S/MIME消息中,输出到文件mail.sgnopenssl smime -sign -in mail.txt -signer cert.pem -inkey key.pem -out mail.sgn# 验证S/MIME消息mail.sgn,输出到文件mail.txt# 签名者的证书应该作为S/MIME消息的一部分包含在mail.sgn中openssl smime -verify -in mail.sgn -out mail.txt

文章作者: Escape

文章链接:

标签: #ssl协议的定义 #dss算法全称