标签:linux
首先我们肯定会问什么是OpneSSL,以及OpenSSL有什么用?当让这不仅是刚接触Linux的我想知道,相信大多数人和我一样也非常想知道,因为OpenSSL是linux上基础的服务之一,了解它的应用可以帮助我们更好的了解linux。那么我们先了解下什么是OpenSSL已经它有什么用。
一、OpenSSL及其应用
首先我们要了解SSL是什么?SSL是Secure Sockets Layer(安全套接层协议)的缩写,可以在Internet上提供秘密性传输。Netscape公司在推出第一个Web浏览器的同时,提出了SSL协议标准。其目标是保证两个应用间通信的保密性和可靠性,可在服务器端和用户端同时实现支持。已经成为Internet上保密通讯的工业标准。
OpenSSL 是一个强大的安全套接字层密码库,囊括主要的密码算法、常用的秘钥和证书封装管理功能及SSL协议,并提供丰富的应用程序供测试或其它目的使用。OpenSSL还可在局域网内构建私有CA,实现局域网内的 证书认证和授权,保证数据传输的安全性。如何构建私有CA呢?后面将详细讲述基于OpenSSL实现私有CA构建。
二、了解常用的加密方式
加密方式有对称加密 非对称加密 单向加密
1、 对称加密:
加密和加密都用同一个对称密钥,但是,这种加密方法存在一定问题,就是密钥传输时,容易被盗窃。还有密钥管理困难,对称加密的方法:DES、AES、Blowfish、Twofish、IDEA、RC6、CAST5。
2、 非对称加密:
公钥和私钥都可以进行加密,解密是公钥和私钥对应解密的,就好像一把锁对应多把相同的钥匙一样,公钥可以公开的,非对称加密解决了密钥传输时带来的问题,同时还解决了密钥管理的繁杂的问题。但是如果你用非对称加密的方式来加密一段数据,速度会非常慢,比对称加密的速度慢几个数量级。非对称加密的方法:RSA DSA
3、单向加密:
单向加密是用来提取数据的特征码,为了保证数据传输时的完整性,哪怕数据发生一点的变化,特征码都会引起巨大的改变,单向加密的方法:MD5 SHA
三、数据的安全传输方式
如上面已经提到了三种加密方式,和一些加密算法。那么在数据的传输过程中如何才能保证数据传输的安全性呢?
对于发送段和接收端,如下阐述
1、发送端:
(1)、使用单向加密算法提取生成数据的特征码
(2)、使用自己的私钥加密特征码附加在数据后面
(3)、生成用于对称加密的临时密钥
(4)、用此临时密钥加密数据和已经使用私钥加密后的特征码
(5)、使用接收方的公钥加密此临时密钥,附加在对称加密后的数据后方
2、接收端:
(1)、使用自己的私钥解密加密的临时密钥;从而获得对称密钥
(2)、使用对称密钥解密对称加密的数据和私钥加密的特征码密文;从而获得数据和特征码密文
(3)、使用发送方的公钥解密特征码密文,从而获得从计算生成的特征码
(4)、使用与对方同样的单向加密算法计算数据的特征码,并与解密而来的进行比较
注:图片出自 http://www.178linux.com/2704
阐述中提到的公钥,用来加密;私钥用来解密。公钥与私钥的作用的作用是:用公钥加密的内容只能用私钥解密,用私钥加密的内容只能用公钥解密
四、与CA证书创建的一些内容
如上所述,在数据的传输过程中存在很多不安全因素,因此对数据加密传输成了现在互联网上一个常用手段,那么如何多数据进行加密传输呢,我们这边就来介绍一种关于数据加密的协议,即CA证书。也许我们这边说的不是太准确,我个人的理解CA就是用于加密通信的一种实现方式。那么我们如何去创建一个CA呢,当然我这里所的创建是针对本机来说的,而对于互联网上的CA证书都是有权威机构颁发的。私人是没有权限颁发CA证书的。如果我们要创建私有CA的话,需要了解以下几个内容:
1、PKI:公钥基础设施(Public Key Infrastructure)
包含以下组成部分:
签证机构:CA
注册机构:RA
证书吊销列表:CRL
证书存取库
2、X.509证书的格式:定义了证书的结构以及认证协议标准
版本号
序列号
签名算法ID
发行者名称
有效期限
主体名称
主体公钥
发行者惟一标识
主体的惟一标识
扩展
发行者签名
3、SSL:安全的套接字层(Secure Socket Layer)
SSL的版本:
1995:SSL 2.0, Netscape
1996: SSL 3.0
1999: TLS 1.0 :改名为TLS
2006: TLS 1.1 RFC 4346
2008:TLS 1.2 :现在常用的是这个版本
2015: TLS 1.3 :这个是现在比较新的版本,还没有普及
SSL和TCP/IP协议一样也使用了分层设计的结构,下面介绍下它的分层结构
(1)、最低层:基础算法原语的实现,aes, rsa, md5
(2)、向上一层:各种算法的实现
(3)、再向上一层:组合算法实现的半成品
(4)、用各种组件拼装而成的种种成品密码学协议/软件,如:tls, ssh,
4、OpenSSL:程序包是开源项目
有三个组件组成:
openssl: 多用途的命令行工具;
libcrypto: 公共加密库;
libssl: 库,实现了ssl及tls;
(1)openssl命令详解
查看当前openssl的版本
[root@localhost ~]# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
(2)对称加密实现:加密和解密使用同一个秘钥,如:
[root@localhost tmp]# openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext
#对tmp下fstab这个文件进行des3加密方式加密输出为fstab.ciphertext
enter des-ede3-cbc encryption password:
#输入密码
Verifying - enter des-ede3-cbc encryption password:
#再次输入密码
[root@localhost tmp]# tail -3 fstab.ciphertext
#查看fstab.ciphertext文件,这里就会显示编码的形式
YudNqbvUskrHCcXg6BJqUOQXG0cfxUpz77jQpwKD5F/ASUtOs+zBkKvctWe+bOTs
Az1oGEeUn5gwHp4PBvSQbZJpY+BurIr+pcwXO1lt4M2odWmV7wG1RQDHanukOUAj
EJ2S4jyoOhHO1yzlpqKjypTsGQB3IMs+969n6w4iAio=
[root@localhost tmp]# rm -rf fstab
#删除原文件
[root@localhost tmp]# openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab
#把
fstab.ciphertext解密输出为fstab文件
enter des-ede3-cbc decryption password:
#输入密码
[root@localhost tmp]# tail -3 fstab
#查看解密后的文件
devpts /dev/pts devpts gid=5,mode=620 0 0
sysfs /sys sysfs defaults 0 0
proc /proc proc defaults 0 0
[root@localhost tmp]#
注:其中的加密算法可以根据自己的需要更改
(3)单项加密
dgst命令:
用法:openssl dgst -md5 /PATH/TO/SOMEFILE ,如
[root@localhost tmp]# openssl dgst -md5 fstab
MD5(fstab)= e83bea7d589639c435390c19b372e89e
(4) 生成用户密码,passwd命令,如
[root@localhost tmp]# openssl passwd -1 -salt 12345 deanzhu
$1$12345$I3fdyYvZmTklIOQyuo5HG1
(5)生成随机数,
openssl rand -base64|-hex NUM
NUM: 表示字节数;-hex时,每个字符4位,出现的字符数为NUM*2; 如
[root@localhost tmp]# openssl rand -base64 16
ZHTO2YRBGxfKnXqeAcpVtg==
[root@localhost tmp]# openssl rand -base64 24
tZGXdlyo9zRCiLhnPv9YDdrFnd01SYX4
(6)生成秘钥对
用法:openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS
提取出公钥:
用法:openssl rsa -in /PATH/FROM/PRIVATEKEY.FILE -pubout
[root@localhost tmp]# openssl genrsa -out rsakey.privte 2048 #生成2048位的私钥
Generating RSA private key, 2048 bit long modulus
............+++
.......+++
e is 65537 (0x10001)
[root@localhost tmp]# cat rsakey.privte #查看私钥
-----BEGIN RSA PRIVATE KEY-----
MIIEpQIBAAKCAQEAzOE5ObkTYyZeYBJHbNm6qFADp+96Vg2VGHZTWtUO609j+36f
dTBHtIxG9HlRnADVJhDCgGKmBMta3zuHVe4gsVTuCHSFuNETxrV/Z1bZg9EH/vB8
bJ7ML9Jpw+8og0hzix8Vxgd52Bp2KXq02qq2TkJzHeJMoxQF6EAJPrtCsi6fJ6JN
9kDFnu8OKJHj9yBZgLt7lKe+zwcA+hV5Dt6Ca4z1h9ckrBdI4pF6gv6Jk2Yu3Y2W
JZRhXzmRPWIofO3CghDYVLrmqraWvsQb3SYm13IWnfYGAr14eV8W/ONS5BxuNoHA
ZdM+i0fAvf55loKvMPkjD2gkLTy3UY79BIh5BwIDAQABAoIBAAH8/Y0t2p5PtQLB
qqfHxSP1AtQSYuGK6DOAknaDMs3dy16Zb/q3KTr7UYT12HDnISppZznPu0S4pH0e
GsYetXqDFHxIhTOx87st77qVAS9iS+2Rb+Ot9tVP+W7JV19OyLBE8PUnBWuvdg4Y
/sBQf8xqoKtdktjSTOxgErblIlSQUs1nBWfnRf5rXEEvd97/30EUUhFMVF23HEA5
xjgdXnCQdGZjpVxN57OTMKQ/Rj+8StXJYsvunGfYMIoR99ziHyrJF8hgX/mwiHEw
XeUYXxLPUFWcSKDUwO1hYlTap5NB0DNW/zDtj6VF5MtHYUI0fIDuZNgA7/BKirrb
ydnbCIECgYEA+FuLnkxR0deT3w7t1e7ATflJREmTdhcOM0BeBMFi5aoVvjDqOqbD
91kWqy34jina+44weg2N4youXsCQtjxc3bTmVXg1lsUIWsSTU8XMhhAvRkit1Hr8
HPuEB6QTiuu4ZSNydAUyKaaOZp8OvOTB/cjArYJZHm1nXWcZ+6LNFtECgYEA0y8t
tO1IWiQx2yg+MhIjkMgFEzhnVmLZa8dkW2QwhW/MKVB3evJM4DyklZiuCLD5QpLl
uvWlwNdrpYCjliLJOcUC1f5ExJnNk9ZxjYpcx7/cHT5+CNR7aru3wSm5EUOBPCHf
lnh6NZBhk5xzi8EmpZDqdjItowqCBaD9kzxYOFcCgYEAoteLjSingTqjp17njR01
lCq+4nqHqKdnVS2AOAgA62uBRCpYekp8NYOBfI3w6m4BOm251V1ryiYPL2t9ty+P
CIOjfykJoijg2HsJyqTn/INCLAhdifN1uR8lK8lmUvFJ/26ljfMWN/8QYbMq+6nW
lKt7woi0HGJJoxGGFNtjM/ECgYEAzA2eAF/1tQOcGMJ9tivIqbBbFwM89j91DasP
0S6xo30urAzQJb/RgCmYbeOk5Uj6z9TYnRmWGwsLPFNbvUnHXUZ7QwH4uG5UMTDX
b4fttiQwLyGe7jFBPxQ6rS3/YCr1yICCZgXrL65eWh6llrf++6NWqPY7Gnqgv4ea
/JUmOOkCgYEAngIzNp8EBLdNFvnca59GMT4CmVF8Wk/hZGAPBCEeGHnpqBiSfytg
aTwdkwRy1FfCSbqju3tzMkdB57nwKaT0er8uHN9L/5hIgjcaQyHtNlYYKxqsh9gH
Nf1IKJLUIX4JtnDBfWQay4WJO0l9U+WLGlX3WFoZebnhAgJO3LBchfo=
-----END RSA PRIVATE KEY-----
[root@localhost tmp]# openssl rsa -in rsakey.privte -pubout #从私钥中提取公钥
writing RSA key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzOE5ObkTYyZeYBJHbNm6
qFADp+96Vg2VGHZTWtUO609j+36fdTBHtIxG9HlRnADVJhDCgGKmBMta3zuHVe4g
sVTuCHSFuNETxrV/Z1bZg9EH/vB8bJ7ML9Jpw+8og0hzix8Vxgd52Bp2KXq02qq2
TkJzHeJMoxQF6EAJPrtCsi6fJ6JN9kDFnu8OKJHj9yBZgLt7lKe+zwcA+hV5Dt6C
a4z1h9ckrBdI4pF6gv6Jk2Yu3Y2WJZRhXzmRPWIofO3CghDYVLrmqraWvsQb3SYm
13IWnfYGAr14eV8W/ONS5BxuNoHAZdM+i0fAvf55loKvMPkjD2gkLTy3UY79BIh5
BwIDAQAB
-----END PUBLIC KEY-----
五、私有CA的搭建
如果要创建CA我们就必须先了解下和CA相关的工作流程,如下图
注:图片出自 http://www.178linux.com/2704
1、服务器端建立CA
[root@localhost CA]# (umask 077;openssl genrsa -out /etc/pki/CA/private/ca 2048 -des3) #生成秘钥
Generating RSA private key, 2048 bit long modulus
....................................+++
...............................................+++
e is 65537 (0x10001)
[root@localhost CA]# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 365
#自签证书
You are about to be asked to enter information that will be incorporated
into 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 blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:beijing
string is too long, it needs to be less than 2 bytes long
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:mageedu
Organizational Unit Name (eg, section) []:www.mageedu
Common Name (eg, your name or your server‘s hostname) []:www.mageedu.com
Email Address []:admin@mageedu.com
[root@localhost CA]# ls
cacert.pem certs crl newcerts private
[root@localhost CA]# touch index.txt #初始化工作环境
[root@localhost CA]# echo 01 > serial
2、客户端申请证书
[root@localhost CA]# (umask 077; openssl genrsa -out /etc/rsa/my.key 2048 -des3)
#客户端生成秘钥对
Generating RSA private key, 2048 bit long modulus
.......................+++
......................................+++
e is 65537 (0x10001)
[root@localhost CA]# openssl req -new -key /etc/rsa/my.key -out /etc/rsa/my.csr
#生成证书请求
You are about to be asked to enter information that will be incorporated
into 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 blank
For some fields there will be a default value,
If you enter ‘.‘, the field will be left blank.
-----
Country Name (2 letter code) [XX]:CN
State or Province Name (full name) []:beijing
Locality Name (eg, city) [Default City]:beijing
Organization Name (eg, company) [Default Company Ltd]:mageedu
Organizational Unit Name (eg, section) []:www.mageedu
Common Name (eg, your name or your server‘s hostname) []:www.mageedu.com
Email Address []:admin@mageedu.com
Please enter the following ‘extra‘ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
3、把签署请求文件发送给CA服务器
可以使用命令 scp
用法:PULL:scp [options] [user@]host:/PATH/FROM/SOMEFILE /PATH/TO/SOMEWHERE
PUSH: scp [options] /PATH/FROM/SOMEFILE [user@]host:/PATH/TO/SOMEWHERE
4、服务器签署证书
[root@localhost CA]# openssl ca -in /etc/pki/CA/my.csr -out /etc/pki/CA/my.crt -days 365
#签署证书,有效期为365天
Using configuration from /etc/pki/tls/openssl.cnf
Check that the request matches the signature
Signature ok
Certificate Details:
Serial Number: 1 (0x1)
Validity
Not Before: Sep 6 10:57:27 2015 GMT
Not After : Sep 5 10:57:27 2016 GMT
Subject:
countryName = CN
stateOrProvinceName = beijing
organizationName = mageedu
organizationalUnitName = www.mageedu
commonName = www.mageedu.com
emailAddress = admin@mageedu.com
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
1F:60:5C:7F:76:1E:DC:0D:78:C6:EA:FC:DE:2D:A5:DC:74:69:2E:4B
X509v3 Authority Key Identifier:
keyid:B3:61:4C:47:88:80:44:F2:C7:4C:D6:F2:9D:33:E2:3C:FC:4D:28:1E
Certificate is to be certified until Sep 5 10:57:27 2016 GMT (365 days)
Sign the certificate? [y/n]:y
1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated
[root@localhost CA]# cat index.txt
#查看index文件,存放证书subject信息,其中V表示可用证书
V 160905105727Z 01 unknown /C=CN/ST=beijing/O=mageedu/OU=www.mageedu/CN=www.mageedu.com/emailAddress=admin@mageedu.com
5、发送给请求者
[root@localhost mysql]# scp /etc/pki/CA/my.crt 192.168.0.13:/tmp
#将证书发送的客户端机器的tmp目录下
The authenticity of host ‘192.168.0.13 (192.168.0.13)‘ can‘t be established.
RSA key fingerprint is ef:3d:22:74:19:4f:5f:70:29:b9:a0:de:0b:db:41:ba.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added ‘192.168.0.13‘ (RSA) to the list of known hosts.
Address 192.168.0.13 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
root@192.168.0.13‘s password:
my.crt 100% 4659 4.6KB/s 00:00
6、吊销证书
[root@localhost CA]# openssl x509 -in my.crt -noout -serial -subject
#获取证书节点
serial=01
subject= /C=CN/ST=beijing/O=mageedu/OU=www.mageedu/CN=www.mageedu.com/emailAddress=admin@mageedu.com
[root@localhost CA]# cat index.txt
#CA根据节点提交的serial和subject来验证index.txt文件中信息是否一致
V 160905105727Z 01 unknown /C=CN/ST=beijing/O=mageedu/OU=www.mageedu/CN=www.mageedu.com/emailAddress=admin@mageedu.com
[root@localhost CA]# openssl ca -revoke newcerts/01.pem #吊销证书
Using configuration from /etc/pki/tls/openssl.cnf
Revoking Certificate 01.
Data Base Updated
[root@localhost CA]# echo 00 > crlnumber #生成吊销证书的编号
[root@localhost CA]# openssl ca -gencrl -out thisca.crl #更新证书吊销列表
Using configuration from /etc/pki/tls/openssl.cnf
六、总结
关于openssl其中有很多内容还没有讲到,以上的内容只是个人学习的总结,可能有些部分说的不正确,还请指出。谢谢!
标签:linux
原文地址:http://deanzhulinux.blog.51cto.com/10652113/1699306