加密解密技術基礎:
安全的目標:
保密性:confidentiality
確保通信信息不被任何無關的人看到
完整性:integrity
實現通信雙方的報文不會產生信息丟失
數據完整性
系統完整性
可用性:availability
通信任何一方產生的信息應當對授權實體可用
攻擊類型:
威脅保密性的攻擊:竊聽、通信量分析
威脅完整性的攻擊:更改、偽裝、重放、否認
重放:攻擊者能截獲雙方通信的報文,并開始一遍遍發送
否認:通信的雙方的某一方發送的,下訂單說沒下
威脅可用性的攻擊:拒絕服務(DoS)
解決方案
技術(加密和解密)
加密和解密:
傳統加密方法:替代加密方法、置換加密方法
現代加密方法:現代塊加密方法
現代塊加密:把發送的整個數據切割固定成塊,每塊單獨加密,前后兩個塊建立關聯關系
服務(用于抵御攻擊的服務,也即是為了上述安全目標而特地設計的安全服務)
服務:
認證機制
訪問控制機制
密鑰算法和協議
對稱加密
公鑰加密
單向加密
認證協議
加密數據依賴與算法和密鑰,安全性依賴于密鑰。因為算法是公開的人人都可以得到,但是密鑰只有通信的主機才有
Linux系統上述功能解決方案:
OpenSSL(ssl):OpenSSL是ssl協議和加密庫的實現
GPG(pgp):GPG是gpg協議的實現
對稱加密算法:
對稱加密(私鑰加密):加密和解密使用同一個密鑰
DES:Data Encryption Standard(數據加密標準)
IBM實驗室研發;加密端64位明文產生64為密文,解密端64位密文還原64位明文,8個字節為一塊,加密和解密使用56位密鑰,DES使用16個迭代塊實現,是現代加密算法
3DES: Triple DES(三重數據加密標準)
DES的增強版,比DES多3個數量級
AES: Advanced Data Encryption Standard(高級數據加密標準);(128bits, 192bits, 256bits, 384bits)
AES算法欲取待3DES算法,支持128,192和256位密鑰長度,有效的密鑰長度可達上千位。AES算法采用了更為高效的編寫方法,對CPU的占用率較少,目前廣泛使用。
特性:
1.加密、解密使用同一個密鑰,效率高
2.將原始數據分割成固定大小的塊,逐個進行加密
缺陷:
1.密鑰過多
2.密鑰分發困難
3.數據來源無法確認
非對稱加密算法:
公鑰加密:密鑰是成對出現
公鑰(public key):從私鑰中提取產生,公開給所有人
私鑰(secret key):通過工具創建,自己留存,必須保證其私密性
特點:
用公鑰加密的數據,只有私鑰能解密,其保密性能到了保障;性能較差,用私鑰加密的數據,只能用公鑰解密,任何人都何以獲得公鑰,可以確認發送方身份(身份認證)
功能:
數字簽名:主要在于讓接收方確認發送方身份,完成身份驗證
對稱密鑰交換:發送方用對方的公鑰加密一個對稱密鑰后發送給對方
數據加密:適合加密較小數據
缺點:
密鑰長,加密解密效率低下
算法:
RSA:只能實現簽名,加密和解密
DSA:只能加密,只能做數字簽名
ELGamal:商業算法
就算法本身的實現來講,公鑰加密技術比對稱加密技術的速度慢上差不多3個數量級,一個數量級就是10倍,所以3個數量級不是30倍,而是1000倍。因此,在加密數據時是很少用到公鑰去加密的。
非對稱加密:
基于一對公鑰/密鑰對
用密鑰對中的一個加密,另一個解密
實現加密:
接收者
生成公鑰/密鑰對:P和S
公開公鑰P,保密密鑰S
發送者
使用接收者的公鑰來加密消息M
將P(M)發送給接收者
接收者
使用密鑰S來解密:M=S(P(M)
實現數字簽名:
發送者
生成公鑰/密鑰對:P和S
公開公鑰P,保密密鑰S
使用密鑰S 來加密消息M
發送給接收者S(M)
接收者
使用發送者的公鑰來解密M=P(S(M))
結合簽名和加密
分離簽名
單向加密:
即提出數據指紋;只能加密,不能解密
特性:
定長輸出:無論原來的數據是多大級別,其加密結果長度一樣
雪崩效應:只要數據有一點不同,結果就會有巨大的不同
不可逆:不能通過特征碼還原數據
算法:
md5:Message Digest 5, 128bits
sha1(Secure Hash Algorithm安全散列算法):160bits,sha224,sha256,sha384,sha512
功能:確保數據完整性
如在一個網站下載軟件,為了驗證軟件在下載過程中沒有被第三方修改,網站會提供一個MD5和軟件的特征碼,只要把MD5碼下載下來和我們下載的軟件進行運算就可以得到軟件的特征碼,只要這個特征碼和網站提供的一樣,說明軟件沒有被修改,如果不一樣,百分之百是被修改了。
密鑰交換:
密鑰交換:IKE(Internet Key Exchange)
公鑰加密:通過非對稱加密算法,加密對稱加密算法的密鑰,在用對稱加密算法實際要傳輸的數據
DH (Deffie-Hellman) :生成會話密鑰
前提發送方和接受方協商使用同一個大素數p和生成數g,各自產生的隨機數X和Y。發送方將g的X次方mod P產生的數值發送給接收方,接受方將g的Y次方mod P產生的數值發送給發送方,發送方再對接收的結果做X次方運算,接受方對接收的結果做Y次方運算,最終密碼形成,密鑰交換完成。
DH:
A: p,g
B: p,g
A: 生成隱私數據 :x (x<p)計算得出 p^x%g ,發送給B
B: 生成隱私數據 :y, 計算得出 p^y%g,發送給A
A:計算得出 [(p^y%g)^x] %p = p^xy%g,生成為密鑰
B:計算得出 [(p^x%g)^y] %p = p^xy%g,生成為密鑰
安全協議:
SSL: Secure Socket Layer
功能:機密性,認證,完整性,重放保護
兩階段協議,分為握手階段和應用階段
握手階段(協商階段): 客戶端和服務器端認證對方身份(依賴于PKI體系,利用數字證書進行身份認證),并協商通信中使用的安全參數、密碼套件以及主密鑰。 后續通信使用的所有密鑰都是通過MasterSecret 生成。
應用階段:在握手階段完成后進入,在應用階段通信雙方使用握手階段協商好的密鑰進行安全通信。
分層設計:
1、最底層:基礎算法原語的實現,aes, rsa, md5
2、向上一層:各種算法的實現
3、再向上一層:組合算法實現的半成品
4、用各種組件拼裝而成的各種成品密碼學協議軟件
SSL/TLS
SSL:Secure sockets Layer
版本:V1.0, V2.0, V3.0
TLS:transport layer Security
版本:V1.0, V1.1, V1.2, V1.3
SSL(Secure Sockets Layer,安全套接層),及其繼任者TLS(Transport Layer Security,傳輸層安全)是為網絡通信提供安全及數據完整性的一種安全協議。TLS與SSL在傳輸層對網絡連接進行加密。
Handshake協議:包括協商安全參數和密碼套件、服務器身份認證(客戶端身份認證可選)、密鑰交換
ChangeCipherSpec協議:一條消息表明握手協議已經完成Alert協議:對握手協議中一些異常的錯誤提醒,分為fatal和warning 兩個級別,fatal 類型錯誤會直接中斷SSL 鏈接,而warning級別的錯誤SSL鏈接仍可繼續,只是會給出錯誤警告
Record協議:包括對消息的分段、壓縮、消息認證和完整性保護、加密等
HTTPS協議:就是“HTTP 協議”和“SSL/TLS 協議”的組合。HTTP over SSL” 或“HTTP over TLS”,對http 協議的文本數據進行加密處理后,成為二進制形式傳輸
OpenSSL簡介:
OpenSSL由三部分組成:libencrypto庫,libssl庫,openssl多用途命令行工具。
OpenSSL是網絡通信提供安全及數據完整性的一種安全協議,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協議,并提供了豐富的應用程序供測試或其它目的使用。
OpenSSL是一個強大的安全套接字層密碼庫,Apache使用它加密HTTPS,OpenSSH使用它加密SSH,它還是一個多用途的、跨平臺的密碼工具。
SSL是Secure Sockets Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸。Netscape公司在推出第一個Web瀏覽器的同時,提出了SSL協議標準。其目標是保證兩個應用間通信的保密性和可靠性,可在服務器端和用戶端同時實現支持。已成為Internet上保密通訊的工業標準。安全套接層協議能使用戶/服務器應用之間的通信不被攻擊者竊聽,并且始終對服務器進行認證,還可選擇對用戶進行認證。
SSL協議要求建立在可靠的傳輸層協議(TCP)之上。SSL協議的優勢在于它是與應用層協議獨立無關的,高層的應用層協議(例如:HTTP,FTP,TELNET等)能透明地建立于SSL協議之上。
SSL協議在應用層協議通信之前就已經完成加密算法、通信密鑰的協商及服務器認證工作。在此之后應用層協議所傳送的數據都會被加密,從而保證通信的私密性。
通過以上敘述,SSL協議提供的安全信道有以下三個特性:
1、數據的保密性信息加密就是把明碼的輸入文件用加密算法轉換成加密的文件以實現數據的保密。加密的過程需要用到密鑰來加密數據然后再解密。沒有了密鑰,就無法解開加密的數據。數據加密之后,只有密鑰要用一個安全的方法傳送。加密過的數據可以公開地傳送。
2、數據的完整性加密也能保證數據的一致性。例如:消息驗證碼(MAC),能夠校驗用戶提供的加密信息,接收者可以用MAC來校驗加密數據,保證數據在傳輸過程中沒有被篡改過。
3、安全驗證加密的另外一個用途是用來作為個人的標識,用戶的密鑰可以作為他的安全驗證的標識。SSL是利用公開密鑰的加密技術(RSA)來作為用戶端與服務器端在傳送機密資料時的加密通訊協定。
基本功能:
OpenSSL整個軟件包大概可以分成三個主要的功能部分:密碼算法庫、SSL協議庫以及應用程序。OpenSSL的目錄結構自然也是圍繞這三個功能部分進行規劃的。
作為一個基于密碼學的安全開發包,OpenSSL提供的功能相當強大和全面,囊括了主要的密碼算法、常用的密鑰和證書封裝管理功能以及SSL協議,并提供了豐富的應用程序供測試或其它目的使用。
OpenSSL的應用程序已經成為了OpenSSL重要的一個組成部分。如OpenCA,就是完全使用OpenSSL的應用程序實現的。OpenSSL的應用程序是基于OpenSSL的密碼算法庫和SSL協議庫寫成的。
OpenSSL的應用程序主要包括密鑰生成、證書管理、格式轉換、數據加密和簽名、SSL測試以及其它輔助配置功能。
輔助功能:
BIO機制是OpenSSL提供的一種高層IO接口,該接口封裝了幾乎所有類型的IO接口,如內存訪問、文件訪問以及Socket等。這使得代碼的重用性大幅度提高,OpenSSL提供API的復雜性也降低了很多。
OpenSSL對于隨機數的生成和管理也提供了一整套的解決方法和支持API函數。隨機數的好壞是決定一個密鑰是否安全的重要前提。
OpenSSL還提供了其它的一些輔助功能,如從口令生成密鑰的API,證書簽發和管理中的配置文件機制等等。
特點:
OpenSSL采用C語言作為開發語言,這使得OpenSSL具有優秀的跨平臺性能,這對于廣大技術人員來說是一件非常美妙的事情,可以在不同的平臺使用同樣熟悉的東西。OpenSSL支持Linux、Windows、BSD、Mac、VMS等平臺,這使得OpenSSL具有廣泛的適用性。
(1)在通信之前,服務器端通過加密算法生成一對密鑰,并把其公鑰發給CA申請數字證書。
(2)CA審核后,結合服務端發來的相關信息生成數字證書,并把該數字證書發回給服務器端。
(3)客戶端和服務器端經tcp三次握手,建立初步連接。
(4)客戶端發送http報文請求并協商使用哪種加密算法。
(5)服務端響應報文并把自身的數字簽名發給服務端。
(6)客服端下載CA的公鑰,驗證其數字證書的擁有者是否是服務器端(這個過程可以得到服務器端的公鑰)。(一般是客戶端驗證服務端的身份,服務端不用驗證客戶端的身份。)
(7)如果驗證通過,客戶端生成一個隨機對稱密鑰,用該密鑰加密要發送的URL鏈接申請,再用服務器端的公鑰加密該密鑰.
(8)把加密的密鑰和加密的URL鏈接一起發送到服務器。
(9)服務器端使用自身的私鑰解密,獲得一個對稱密鑰,再用該對稱密鑰解密經加密的URL鏈接,獲得URL鏈接申請。
(10)服務器端根據獲得的URL鏈接取得該鏈接的網頁,并用客戶端發來的對稱密鑰把該網頁加密后發給客戶端。
(11)客戶端收到加密的網頁,用自身的對稱密鑰解密,就能獲得網頁的內容了。
(12)TCP四次揮手,通信結束。
以上可概括為:
客戶端向服務器端索要并驗證證書
雙方協商生成“會話秘鑰”
雙方采用“會話秘鑰”并進行加密通信
第一階段:
支持的協議版本,如tls1.2
客戶端生成一個隨機數,稍后用戶會生成“會話密匙”
支持的加密算法,如AES 3DES RSA
支持的壓縮算法
第二階段:
確認使用的加密通信協議版本,如tls1.2
服務器端生成一個隨機數,稍后用于生成“會話密匙”
確認使用的加密算法
服務器證書
第三階段:
驗證服務器證書,在確認無誤后取其公鑰(發證機構 證書完整性 證書持有者 證書有效期 吊銷列表)
發送以下信息給服務器端
一個隨機數
編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送
客戶端握手結束通知
第四階段:
收到客戶端發來的第三個隨機數后,計算生成本次會話所有的“會話密匙”
向客戶端發送如下信息
編碼變更通知,表示隨后的信息都將用雙方商定的加密方法和密鑰發送
服務端握手結束通知
OpenSSL:開源項目
三個組件:
openssl:多用途的命令行工具,包openssl
libcrypto:加密算法庫,包openssl-libs
libssl:加密模塊應用庫,實現了ssl及tls,包nss
openssl 命令:
兩種運行模式:交互模式和批處理模式
openssl version :程序版本號
標準命令、消息摘要命令、加密命令
標準命令:enc, ca, req, …
對稱加密:
工具:openssl enc, gpg
算法:3des, aes, blowfish, twofish
enc命令
加密:openssl enc -e -des3 -a -salt -in testfile -out testfile.cipher
-out the output filename, standard output by default. (默認輸出文件名)
[root@localhost ~]#cp /etc/fstab ./ [root@localhost ~]#openssl enc -e -des3 -a -salt -in fstab -out fstab.ciphertext enter des-ede3-cbc encryption password: Verifying - enter des-ede3-cbc encryption password: [root@localhost ~]#cat fstab.ciphertext U2FsdGVkX1/hU0jm/EPlZbiQUmAIsjgHV7GfvQ04usIvPq/xgCN/xtBC0tr2Agk6 Q04cXS+5wreXMHMckBd/4infdJfivJQrAyIDmGBmneI6miMp7Hrks+L4HNfYJego ZquUJ37uXI3BkStSdOI8d7AWYItK7sobT+vgDgwCg/BB7Le+dXEIl5+zxpaMv4Fs yD92SVs7JAqbHxELtFMAPcn9d3CwRqg4wOBHNnvk3Fnvy9VtBu4M613OFFwiswOJ YPSNVCyO+tSLxTr9ckdqwgiQrtUmiKK0gHQ4q3BZt78m778Twe7sOk9q2tOjjTUL eOHVHrkmyYRnsagdp690j95FSqytFhQEB2itZQRFFKZ88Ul2ph8KnLo0wwkzRspN SLtXHh0uAxWbKAEHlm37xo/3SL67J65FHBB1Pooao+O5PURr42nnSfauSBefVgNd 37/+i4VOlJJUXz4kRhtrbHYGvH6zpAjRhoKza53+MiuQVe/I0QYnRwWH8UVaTBKw mRk1+IjynAkvGGz7eJtpQxgCbW3WQxjGth/LgAoMh/ptQHDk77oPO4PJiUH/GZJR FM4yztHfwnJF4m/nif/IXsrhk1mbh30UxS5Es5UU4AMoQK61J+815a8UD3B323Bg 0FkXYWBJe/H2rbEcGGCd8Ca15HsMjoTFxls+rbLTR3Af7VH1viiBIkpIuthaujln kcxsVlE2cbBdNlvWxwe2MzEilZ9C66vnH4DXPJ081nA=
解密:openssl enc -d -des3 -a -salt -in testfile.cipher -out testfile
[root@localhost ~]#rm fstab [root@localhost ~]#openssl enc -d -des3 -a -salt -in fstab.ciphertext -out fstab enter des-ede3-cbc decryption password:
單向加密:
工具:md5sum, sha1sum, sha224sum,sha256sum…
openssl dgst
dgst命令:
openssl dgst -md5 [-hex 默認] /PATH/SOMEFILE
openssl dgst -md5 testfile
md5sum /PATH/TO/SOMEFILE
[root@localhost ~]#sha Tab鍵補全 sha1sum sha224sum sha256sum sha384sum sha512sum sharesec shasum [root@localhost ~]#md5sum /etc/fstab 6fa166c9a97af6551d8ccf19b6f3136d /etc/fstab [root@localhost ~]#openssl dgst -md5 /etc/fstab MD5(/etc/fstab)= 6fa166c9a97af6551d8ccf19b6f3136d [root@localhost ~]#sha1sum /etc/fstab d5284c0cb1d454bbab115614bcee5ef3902b0566 /etc/fstab
生成用戶密碼
passwd 命令:
openssl passwd -1 -salt SALT(最多8 位)
openssl passwd -1 -salt centos
[root@localhost ~]#openssl passwd -1 -salt 12345678 qwertyui (最多8 位) $1$12345678$FpVa9qyl5GiVNtY//kUDV. [root@localhost ~]#openssl passwd -1 -salt 123458 qwertyui $1$123458$4zZbsxMC2gTRwvXxBbleu/
生成隨機數:
openssl rand -base64 | -hex NUM
NUM: 表示字節數;-hex 時,每個字符為十六進制,相當于4位二進制,出現的字符數為NUM*2
-base64 Perform base64 encoding on the output. (進行base64編碼輸出)
-hex Show the output as a hex string. (將輸出顯示為十六進制字符串)
[root@localhost ~]#openssl rand -base64 2 r5A= [root@localhost ~]#openssl rand -base64 5 /q8vsB8= [root@localhost ~]#openssl rand -hex 2 94bf [root@localhost ~]#openssl rand -hex 5 f367c5f44d [root@localhost ~]#openssl passwd -1 -salt $(openssl rand -hex 4) Password: $1$02ce1958$TFFQ8O5igytGd4G/4Q2Bv1 [root@localhost ~]#openssl passwd -1 -salt $(openssl rand -hex 4) Password: $1$3d60e8e5$1RfGtyBRV.3patznOzD.B/ [root@localhost ~]#openssl passwd -1 -salt 3d60e8e5 Password: $1$3d60e8e5$1RfGtyBRV.3patznOzD.B/
公鑰加密:
算法:RSA, ELGamal
工具:gpg, openssl rsautl(man rsautl)
數字簽名:
算法:RSA, DSA, ELGamal
密鑰交換:
算法:dh
DSA: Digital Signature Algorithm (數字信號運算法則)
DSS:Digital Signature Standard (數字簽名標準)
RSA:
生成私鑰:
openssl genrsa -out /PATH/TO/PRIVATEKEY.FILE NUM_BITS(umask 077; openssl genrsa -out test.key -des 2048)
[root@localhost ~]#openssl genrsa -out mytest.key 1024 Generating RSA private key, 1024 bit long modulus .........................++++++ ........++++++ e is 65537 (0x10001) [root@localhost ~]#openssl genrsa 1024 > mytest.key Generating RSA private key, 1024 bit long modulus ..............................................................................++++++ ..............++++++ e is 65537 (0x10001) [root@localhost ~]#(umask 0077;openssl genrsa -out test.key 2048) Generating RSA private key, 2048 bit long modulus .........................+++ ........+++ e is 65537 (0x10001) [root@localhost ~]#openssl genrsa 2048 Generating RSA private key, 2048 bit long modulus .........................................................................................+++ ..............................................................+++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIIEowIBAAKCAQEAr1tusenHPi35gxLJj2QZRh5M13RvGnUB43LzhbsnoHpBBckp Q8tbYUSmTnv3hLWgSpsP6vte/H2M0klDAl3Y47KhX2+yTodxgLlVCbrgEg0nHvD3 BM+pWqV4vuul9SQNojvHnoCHTwMHZgnr54FAIOCJWCU1JVsl5ZUcMcDef8i9nyMr Q8a+N6hps17OTchPpOtNV5jWPO2oIJ22qdGbbUWVqx+9ev5A5BS...... [root@localhost ~]#openssl genrsa 1024 -out mytest.key Generating RSA private key, 1024 bit long modulus .....................++++++ .................................................++++++ e is 65537 (0x10001) -----BEGIN RSA PRIVATE KEY----- MIICXgIBAAKBgQC9aqa1x79G6fNmD5j9RbivLC6g50YUxk+empC7LCDTbpKnbqox /Ik7K2FBUEgySQBNP/gJrinF2X6RNMe7cuwhGgRc0b+1LYgkknUPm+t/1eJTRjvI dPvX9ghP/ZPh9spuIbh1Aw6f/6b/0Js3lqrZGn8GN/EW8Ou+fbWtF3Q8XQIDAQAB AoGAE/CNOieb4CgyojTUIx1a0r3w7qlJ/Fff+89DmyCLGBbUw2Fn8zklbSAk7c44 ......
從私鑰中提取出公鑰
openssl rsa -in PRIVATEKEYFILE -pubout -out PUBLICKEYFILE
Openssl rsa -in test.key -pubout -out test.key.pub
[root@localhost ~]#openssl rsa -in test.key -pubout writing RSA key -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4vlRcw/3eGs5hsg2zph1 Y8GSoOTf3HSC+E8hOm9SUOjrm58jZMnv/+u6mJv6NJPf2xavDLstG+X9oqwztuJU gKdN13pJ9BzfOOK2GTB2nDQXq+nNp9DQLtCu/i+CDRKsHFnnLEGapFRwQvCGz/af 8aI3a7U2Hhllz78VvdYY7U3Kfk5AR7/kbADwS1W0Tyqg3GX7BbAUI34W03igpmCC C37dTEolRUpYNsLTZH8g7RsocJHVqIWH1GxcfctJyJ91+qtGT6NsAonypbVhBwkv D31HAaWKQKSdOYaxrOp1T7iWjfwUAykcXkEsgzmAbx7IRnrvPL6iEDI58xzX62FV 5wIDAQAB -----END PUBLIC KEY-----
隨機數生成器:偽隨機數字
/dev/random:僅從熵池返回隨機數;隨機數用盡,阻塞
/dev/urandom:從熵池返回隨機數;隨機數用盡,會利用軟件生成偽隨機數,非阻塞
CA和證書:
PKI: Public Key Infrastructure(公鑰基礎設施)
是一種遵循既定標準的秘鑰管理平臺,它能夠為所有網絡應用提供加密和數字簽名等密碼服務及所必須的密鑰和證書管理體系,PKI就是利用公鑰理論和技術建立的提供安全服務的基礎設施。PKI技術是信息安全技術的核心,也是電子商務的關鍵和基礎技術。
完整的PKI系統必須具有權威認證機構(CA)、數字證書庫、密鑰備份及恢復系統、證書作廢系統、應用接口(API)等基本構成部分,構建PKI也將圍繞著這五大系統來著手構建。
PKI的基礎技術包括加密,數字簽名,數據完整機制,數字信封,雙重數字簽名等。
簽證機構:CA (Certification Authority)
用戶在注冊機構注冊證書,CA就會簽發用戶的公鑰認證,并且和申請者的信息綁定在一起并且簽名后,以證書形式發給申請者,然后在本地的證書存取庫備份。
注冊機構:RA (Registration Authority)
一般用戶都是在這里注冊證書。
證書吊銷列表:CRL (Certificate Revocation List)
如果用戶私鑰丟失,必須要申請吊銷證書,否則可能會被別人冒名頂替。
證書存取庫:
所有發出的證書都會在這里存一份,如果丟失證書可以在這里得到,如果丟失私鑰那么只能申請證書撤銷。
X.509 :定義了證書的結構以及認證協議標準
版本號:標識證書的版本
序列號:標識證書的唯一證書,類似于身份證
簽名算法ID:證書的算法標識
發行者名稱:證書頒發這的可識別名
有效期限:證書有效的時間段
主體名稱:證書擁有著的可識別名
主體公鑰:關鍵部分
發行者的唯一標識:證書頒發者的唯一標識符
主體的唯一標識:證書擁有者的唯一標識符
擴展信息
發行者的簽名:證書頒發者對證書的簽名,上述整個內容做單向加密,得到的特征碼用自己私鑰加密,并附加到后面,用來生產發行者的簽名
證書獲取:
證書類型:
證書授權機構的證書
服務器
用戶證書
獲取證書兩種方法:
使用證書授權機構
生成簽名請求(csr)
將csr 發送給CA
從CA 處接收簽名
自簽名的證書
自已簽發自己的公鑰
創建CA和申請證書
1.創建私有CA:
在確定配置為CA的服務上生成一個自簽證書,并為CA提供所需要的目錄及文件即可
三種策略:
匹配:申請填寫的信息必須和CA設置信息一致
支持:必須填寫這項申請信息
可選:可寫可不寫
(1) 自簽證書,生成私鑰
[root@localhost /etc/pki/CA/private]#(umask 0077;openssl genrsa -out cakey.pem 2048) Generating RSA private key, 2048 bit long modulus ...............................+++ ....................................................................+++ e is 65537 (0x10001)
(2) 生成自簽名證書
-new:生成新證書簽署請求
-x509:生成自簽格式證書,專用于創建私有CA時
-key:生成請求時用到的私有文件路徑
-out:生成的請求文件路徑;如果自簽操作將直接生成簽署過的證書
-days:證書的有效時長,單位是天 (不寫默認為365天)
[root@localhost ~]#openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem -days 3655 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]:Tencent (公司) Organizational Unit Name (eg, section) []:Ops (部門) Common Name (eg, your name or your server's hostname) []:ca.tencent.com (個人或主機名) Email Address []:caadmin@Rookie.com (郵箱地址) [root@localhost /etc/pki/CA]#ll total 4 -rw-r--r-- 1 root root 1424 May 29 20:42 cacert.pem (生成的自簽證書)
(3)為CA提供所需的文件
[root@localhost /etc/pki/CA]#touch index.txt 生成證書索引數據庫文件 [root@localhost /etc/pki/CA]#echo 01 > /etc/pki/CA/serial 制定第一個頒發證書的序列號
2.要用到證書進行安全通信的服務器,需要向CA請求簽署證書
(以httpd為例) [root@localhost /etc/pki/CA]#yum install httpd -y [root@localhost ~]#vim /var/www/html/index.html Test Page [root@localhost ~]#systemctl start httpd.service [root@localhost ~]#ss -tnl LISTEN 0 128 :::80 :::* [root@localhost ~]#mkdir /web/ssl -pv (用來保存證書和私鑰)
(1)生成私鑰
[root@localhost /web/ssl]#(umask 0077;openssl genrsa -out httpd_ key.pem) Generating RSA private key, 1024 bit long modulus ..........................++++++ ......................++++++ e is 65537 (0x10001)
(2)生成證書簽署請求
[root@localhost /web/ssl]#openssl req -new -key httpd_key.pem -out httpd.csr 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]:Tencent Organizational Unit Name (eg, section) []:Ops Common Name (eg, your name or your server's hostname) []:www.tencent.com Email Address []:www.admin@Rookie.com 注意:默認國家,省,公司名稱三項必須和CA一致 Please enter the following 'extra' attributes 可輸入以下額外屬性(可省略) to be sent with your certificate request A challenge password []: An optional company name []:
(3)將請求通過可靠方式發送給CA主機
(4)在CA主機上簽署證書
[root@localhost /web/ssl]#openssl ca -in httpd.csr -out httpd.crt Certificate is to be certified until May 29 14:04:18 2018 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 ~]#yum -y install mod_ssl [root@localhost ~]#vim /etc/httpd/conf.d/ssl.conf
[root@localhost /web/ssl]#systemctl restart httpd.service
將其傳到桌面,并修改后綴為crt(Windows可識別)
吊銷證書
(1) 客戶端獲取要吊銷的證書的serial(在使用證書的主機執行):
[root@localhost ~]#openssl x509 -in /etc/pki/CA/certs/httpd.crt -noout -serial -subject
(2) CA主機吊銷證書
先根據客戶提交的serial和subject信息,對比其與本機數據庫index.txt中存儲的是否一致
吊銷:
[root@localhost ~]#openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem其中的SERIAL要換成證書真正的序列號;
(3) 生成吊銷證書的吊銷編號(第一次吊銷證書時執行)
[root@localhost ~]#echo 01 > /etc/pki/CA/crlnumber
(4) 更新證書吊銷列表
[root@localhost ~]## openssl ca -gencrl -out thisca.crl
參考鏈接:
http://httpd.apache.org/docs/2.2/ssl/
http://3y.uu456.com/bp_4fcga9ntip2mdyx42w3q_1.html
http://www.360doc.com/content/12/0908/00/699489_234931198.shtml
原創文章,作者:Linux.rookie,如若轉載,請注明出處:http://www.www58058.com/77188