OpenSSL以及私有CA的搭建
??????? 首先我們肯定會問什么是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其中有很多內容還沒有講到,以上的內容只是個人學習的總結,可能有些部分說的不正確,還請指出。謝謝!
轉載于:https://blog.51cto.com/deanzhulinux/1699306
總結
以上是生活随笔為你收集整理的OpenSSL以及私有CA的搭建的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 远程服务器虚拟显示器(Ubuntu 20
- 下一篇: [密码学基础][每个信息安全博士生应该知