您好,登錄后才能下訂單哦!
在互聯網通信中,比如QQ、MSN等等,如果我們進行交談的內容沒有被加密,這樣的話別人都可以隨訪問了,這是不合適的,所有我們就要對我們通信的內容進行加密,然后再進行通信就相對比較安全了
在互聯網上數據傳輸有兩種:明文傳輸和加密傳輸。明文傳輸的協議有:ftp、http、smtp、telnet。但是為了數據的完整性和安全性,所以后來引用了加密等相關手段來保證數據的安全和完整性。
加密類型
加密類型 | 原理 | 常用的算法 | 優點 | 缺點 |
對稱加密 | 雙方使用同一種加密算法對數據進行加密解密 | DES, 3DES, AES | 加密速度快,適合對大量數據進行加密,可以保證數據的機密性 | 雙方采用相同加密算法,這樣無法保證數據的完整性,如果要加密的數據多的話,對秘鑰無法有效的管理 |
非對稱加密 | 身份驗證:私鑰加密,公鑰解密 數據發送:公鑰加密,私鑰解密 | RSA DSS | 可以保證數據的可用性,和機密性 | 加密速度慢,要用的秘鑰相當長 |
單項加密 | 直接利用加密算法對數據進行加密,只能加密不能解密 | md5,sha1 ,sha256, sha512 | 可以保證數據的完整性 | 不可解密 |
那么一個完整的數據發送是怎么樣一個過程呢?
1、發送方使用選定的單向加密算法計算原始數據的特征碼;
2、發送方使用自己的私鑰加密特征碼,附加于原始數據后面;
3、發送方生成一次性對稱密鑰,并使用此密鑰加密數據(原始數據+加密后的特征碼);
4、發送方使用接收方的公鑰加密一次性對稱密鑰,附加于加密數據后面
5、發送;
1、接收方使用自己的私鑰解密加密的一次性對稱密鑰;
2、使用對稱密鑰解密數據,得到加密的特征碼和原始數據;
3、使用發送方的公鑰解密加密的特征碼;
4、使用與發送方相同的單向加密算法重新計算數據的特征碼,并與解密出的特征做比較
對于非對稱加密而言,獲取對方的公鑰非常關鍵,最簡單的就是自己建一個站點,把
自己的公鑰公布出去,但是別人在獲得的時候,怎么能確保這公鑰就是公布者的呢?
所以簡單的公鑰分發機制已經不能保證公鑰來源合法性了,于是就有了分布式分發機制,最常見的就是數字證書了
數字證書
我們為什么要用到數字證書呢?大家想象一下,我們要進行通信的時候,怎么去保證對方一定是我們想要進行交流的那個人呢?做數字簽名?那么怎么保證這數字簽名是合法的呢?這時候就需要第三方機構,分發一種大家都認可的數字證書,比如說×××,當我們看到對方的數字證書的時候,是不是就確定了對方的身份了?
數字證書的格式:
數字證書:x.509v3(常用的)
版本號(version)
序列號():證書本身在CA中惟一標識;
簽名算法標志 // 讓使用者確定使用的哪種數據加密算法,以用來驗證證書合法性
發行者名稱
有效期:
證書主體名稱:(組織(主機),個人)
證書主體公鑰信息:
發行商惟一標志
證書主體的惟一標志
擴展:
簽名:
PKI(Public Key Infrastructure)它是一種規范,定義了一個CA所具有的的機構
組成部分:
端實體(申請者)
注冊機構(RC)
簽證機構(CA)-->簽證機構(CA)
證書撤消列表(CRL)發布機構
證書存取庫
那我們如何去制作一個證書申請呢?如果我們僅要求對公司內部的員工分發證書,那么去第三方機構申請證書是需要一定費用的,這時候我們自己建立一個CA并給自己頒發一個證書,這樣就好很多了
要想自建CA的話,我們要借助一個工具,OpenSSL,
openssl由三部分組成,
libcrypto:實現加密解密的工具,很多需要加密的程序都會調用這個庫
libssl :實現ssl功能的
openssl :openssl的命令行工具
Openssl:常用的幾個命令介紹
versinon 查看openssl的版本號
enc 加密
-des3 指定加密算法為des
-in 指定加密/解密文件
-e 加密
-d 解密
-out 制定將加密或者解密過后的文件存放的位置
例如:
將一個文件加密的過程我們就用:
openssl enc -des3 -in /path/to/somefile -e -out /path/to/somefile.des3
將加密過后的文件解密我們就使用:
openssl enc -des3 -in /path/to/somefile.des3 -d -out /path/to/somefile
dgst
-hex 以16禁止顯示計算出的特征碼
-out 保存的文件
例:以md5的算法獲取一個文件的特征碼
openssl dgst -md5 -hex /path/to/somefile
speed 速度測試工具
不帶任何參數將每一種加密算法都測試一遍,指定加密算法的話,只測試指定的算法
生成私鑰:
openssl genrsa num
num 指定生成秘鑰的位數,默認是512位的,必須為2的n次方位
例如:
openssl genrsa 2^n > /path/to/keyfile
openssl genrsa -out /path/to/keyfile 2^n
對于私鑰也是可以加密的
-des3 指定以des3的格式加密
-out 指定保存的位置
例:openssl genrsa -des3 2048
注:我們的私鑰雖然加密,但是也不能讓人隨意看,所以我們應該把私鑰文件的權限改為只有自己才能看
生成公鑰
注:公鑰是從私鑰中中提取出來的:
rsa
-in 私鑰所存放的位置
-pubout 提取公鑰
例:
openssl rsa -in /path/to/keyfile -pubout 叢私鑰中提取公鑰
那如何申請證書呢
用到的命令 req
-in 指定從哪個文件讀取
-key 指定私鑰文件在哪
-new 實現制作證書申請
-days 指定該證書期望使用的時間
-out 把證書申請保存在那個文件下
例如:如何制作一個證書申請呢:
openssl req -new -key /path/to/private_key -out /paht/to/certificate.csr
下面我們就來實現自建CA,制作證書申請,分發證書的過程:
自建CA:
# cd /etc/pki/CA/
1、為CA生成一個私鑰:
[root@www CA]# (umask 077; openssl genrsa -out private/cakey.pem 2048) Generating RSA private key, 2048 bit long modulus ...........................+++ .......+++ e is 65537 (0x10001)
2、生成自簽證書:
[root@www CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3650 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) []:Henan //指定省份 Locality Name (eg, city) [Default City]:Zhengzhou //制定城市 Organization Name (eg, company) [Default Company Ltd]:magedu //指定組織名稱 Organizational Unit Name (eg, section) []:Tech //指定所在的部門 Common Name (eg, your name or your server's hostname) []:www.magelinux.org //指定主機名 Email Address []: //郵箱 [root@www CA]# [root@www CA]# touch index.txt serial //提供序列號文件 [root@www CA]# ls cacert.pem certs crl index.txt newcerts private serial [root@www CA]# echo 01 > serial
注:這里做自簽證書的時候必須要加-x509,不指定的話就是證書申請
這樣的話我們自己的CA就創建好了,自簽證書也好了,就可以拿著證工作了
3、簽署證書:
# openssl ca -in /path/to/certreq.csr -out /path/to/certfile.crt(證書文件都以crt結尾) -days 365
是一個數字簽名的過程
客戶端
生成私鑰
[root@www ~]# mkdir /key [root@www ~]# (umask 077; openssl genrsa -out /key/httpd.key 2048) Generating RSA private key, 2048 bit long modulus ...............................................................................+++ .........................................................+++ e is 65537 (0x10001) [root@www ~]#
制作證書請求:
[root@www ~]# openssl req -new -key /key/httpd.key -out /key/httpd.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) []:Henan Locality Name (eg, city) [Default City]:Zhengzhou Organization Name (eg, company) [Default Company Ltd]:magedu Organizational Unit Name (eg, section) []:Tech Common Name (eg, your name or your server's hostname) []:www.magelinux.org Email Address []: Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []: An optional company name []: [root@www ~]#
簽署證書:
[root@www ~]# openssl ca -in /key/httpd.csr -out /key/httpd1.csr -days 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: Aug 27 06:15:30 2013 GMT Not After : Aug 27 06:15:30 2014 GMT Subject: countryName = CN stateOrProvinceName = Henan organizationName = magedu organizationalUnitName = Tech commonName = www.magelinux.org X509v3 extensions: X509v3 Basic Constraints: CA:FALSE Netscape Comment: OpenSSL Generated Certificate X509v3 Subject Key Identifier: A7:B0:1A:A0:BB:FB:AE:36:18:D0:72:1B:C5:A7:7C:8E:D5:F5:01:1F X509v3 Authority Key Identifier: keyid:7E:76:06:55:50:E5:CB:EE:F0:A7:F0:2E:DB:4D:CD:2B:54:C6:AF:39 Certificate is to be certified until Aug 27 06:15:30 2014 GMT (365 days) Sign the certificate? [y/n]:
專用客戶端測試工具:
# openssl s_client -connect HOST:PORT -CAfile /path/to/cacertfile|-CApath /paht/to/cacertfiles_dir/ -ssl2|-ssl3|-tls1
-connect 說明鏈接那個服務器的那個端口進行檢測
-CAfile 指定使用那個CA證書進行檢測
-CApath 指定那個路徑下的CA證書,與-CAfile二選一使用
-ssl2 指定協議
-state 顯示其狀態
openssl中有如下后綴名的文件
.key格式:私有的密鑰
.crt格式:證書文件,certificate的縮寫
.csr格式:證書簽名請求(證書請求文件),含有公鑰信息,certificate signing request的縮寫
.crl格式:證書吊銷列表,Certificate Revocation List的縮寫
.pem格式:用于導出,導入證書時候的證書的格式,有證書開頭,結尾的格式
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。