1 SSL/TLS基本概念
??SSL: Secure Socket Layer(安全套接層協議)的縮寫,可以在Internet上提供秘密性傳輸,它是在上世紀90年代中期,由Netscape公司設計,目前已有3.0版本,為啥要發明 SSL 這個協議呢?因為原先互聯網上使用的 HTTP 協議是明文的,內容是不加密的,這樣就很可能在內容傳播的時候被別人監聽到,對于安全性要求較高的場合,必須要加密,https就是帶加密的http協議,SSL協議的發明,就解決這些問題,目前SSL有1.0,2.0,3.0,
??TLS: Transport Layer Security(傳輸層安全協議),是 SSL的標準化,相當于SSL的升級,可以把SSL看作是windows7,而TLS看作是windows10,很多時候我們把這兩者并列稱呼 SSL/TLS,因為這兩者可以視作同一個東西的不同階段,HTTPS 協議,說白了就是“HTTP 協議”和“SSL/TLS 協議”的組合,可以把 HTTPS 大致理解為—“HTTP over SSL”或“HTTP over TLS”,目前TLS有1.0,1.1,1.2,其中1.0基于SSL 3.0,修改不大,
??SSL證書: SSL安全協議主要用來提供對用戶和服務器的認證;對傳送的資料進行加密和隱藏;確保資料在傳送中不被改變,即資料的完整性,SSL證書通過在客戶端瀏覽器和Web服務器之間建立一條SSL安全通道,由于SSL技術已建立到所有主要的瀏覽器和WEB服務器程式中,因此,僅需安裝服務器證書就可以激活該功能了,通過它可以激活SSL協議,實作資料資訊在客戶端和服務器之間的加密傳輸,可以防止資料資訊的泄露,保證了雙方傳遞資訊的安全性,而且用戶可以通過服務器證書驗證他所訪問的網站是否是真實可靠,
2 證書相關
2.1 證書申請檔案
??私鑰: 私鑰是一個演算法名稱加上密碼串,用來加解密用的檔案或者字串,
??公鑰: 公鑰也是一個演算法名稱加上密碼串,一般不會單獨給別人,而是嵌在證書里面一起給別人,
??密鑰: 用來加解密用的檔案或者字串,密鑰在非對稱加密的領域里,指的是私鑰和公鑰,他們總是成對出現,其主要作用是加密和解密,常用的加密強度是2048bit,
??CA: certificate authority,認證證書的第三方機構,專門用自己的私鑰給別人進行簽名的單位或者機構
??申請(簽名)檔案: 在公鑰的基礎上加上一些申請人的屬性資訊,比如域名、名稱、國家、地區以及證書適用于什么場景等資訊,然后帶上進行的簽名,發給CA(私下安全的方式發送),帶上自己簽名的目的是為了防止別人篡改檔案,
??證書檔案: 證書由公鑰加上描述資訊,然后經過私鑰簽名之后得到,一般都是一個人的私鑰給另一個人的公鑰簽名,如果是自己的私鑰給自己的公鑰簽名,就叫自簽名,
??簽名程序: CA收到申請檔案后,會走核實流程,確保申請人確實是證書中描述的申請人,防止別人冒充申請者申請證書,核實通過后,會用CA的私鑰對申請檔案進行簽名,簽名后的證書包含申請者的基本資訊,CA的基本資訊,證書的使用年限,申請人的公鑰,簽名用到的摘要演算法,CA的簽名,
2.2 證書檔案格式
證書的編碼格式
??PEM:是Privacy Enhanced Mail的簡稱,通常用于數字證書認證機構(Certificate Authorities,CA),擴展名為.pem, .crt,,.cer, .key,內容為Base64編碼的ASCII碼檔案,有類似“-----BEGIN CERTIFICATE-----“和 “-----END CERTIFICATE-----“的頭尾標記,服務器認證證書,中級認證證書和私鑰都可以儲存為PEM格式(認證證書其實就是公鑰),Apache和nginx等類似的服務器使用PEM格式證書,
??DER:是Distinguished Encoding Rules的簡稱,與PEM不同之處在于其使用二進制而不是Base64編碼的ASCII,擴展名為.der,但也經常使用.cer用作擴展名,所有型別的認證證書和私鑰都可以存盤為DER格式,Java和Windows服務器使用DER格式證書,
證書簽名請求CSR
??CSR:是Certificate Signing Request的簡稱,它是向CA機構申請數字證書時使用的請求檔案,在生成請求檔案前,我們需要準備一對對稱密鑰,私鑰資訊自己保存,請求中會附上公鑰資訊以及國家,城市,域名,Email等資訊,CSR中還會附上簽名資訊,當我們準備好CSR檔案后就可以提交給CA機構,等待他們給我們簽名,簽好名后我們會收到crt檔案,即證書,
??CSR并不是證書,而是向權威證書頒發機構獲得簽名證書的申請,把CSR交給權威證書頒發機構,權威證書頒發機構對此進行簽名,保留好CSR,當權威證書頒發機構頒發的證書過期的時候,還可以用同樣的CSR來申請新的證書,key保持不變,
證書檔案擴展名
??CRT:表示證書,常見于linux系統,可能是PEM編碼和DER編碼,大多數是PEM編碼,
??CER:表示證書,常見于Windows系統,可能是PEM編碼和DER編碼,大多數是DER編碼,
??KEY:存放一個公鑰或者私鑰,編碼可能是PEM或者DER,查看KEY的辦法:openssl rsa -in test.key -text -noout
CSR:Certificate Signing Request,證書簽名請求,核心內容是一個公鑰,在生成這個申請的時候,同時也會生成一個私鑰,
??PFX/P12:predecessor of PKCS#12,常用語windows IIS,
??JKS:即Java Key Storage,這是Java的專利,
證書轉換
??PEM轉為DER:openssl x509 -in cert.crt -outform der -out cert.der
??DER轉為PEM:openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
??查看DER格式證書的資訊:openssl x509 -in certificate.der -inform der -text -noout
3 openssl
3.1 介紹
??openssl 是目前最流行的 SSL 密碼庫工具,采用C語言開發,其提供了一個通用、健壯、功能完備的工具套件,用以支持SSL/TLS 協議的實作,openssl提供的功能相當強大和全面,囊括了主要的密碼演算法、常用的密鑰和證書封裝管理功能以及SSL協議,并提供了豐富的應用程式供測驗或其它目的使用,openssl支持Linux、Windows、BSD、Mac等平臺具有廣泛的適用性,
3.2 加密以及證書管理
3.2.1 對稱加密
加密
[root@devops openssl]# vim aaa linux [root@devops openssl]# openssl enc -aes-256-ecb -a -in aaa -out bbb -k 1234 [root@devops openssl]# ls aaa bbb [root@devops openssl]# cat bbb U2FsdGVkX1/a6xPMGCtW1caekUrFFoe1sGgomoVRWYU=
-a:表示使用base64
-k:表示加密密碼
解密
[root@devops openssl]# openssl enc -aes-256-ecb -d -a -in bbb -out ccc -k 1234 [root@devops openssl]# cat ccc linux
-d:表示解密,解密后的檔案ccc與aaa內容一致
3.2.2 非對稱加密
生成密鑰
[root@devops openssl]# openssl genrsa -out rainbowhhy_private.key 2048 [root@devops openssl]# ls rainbowhhy_private.key
提取公鑰
[root@devops openssl]# openssl rsa -in rainbowhhy_private.key -pubout > rainbowhhy_public.key writing RSA key [root@devops openssl]# ls rainbowhhy_private.key rainbowhhy_public.key
生成密鑰(加密)
[root@devops openssl]# openssl genrsa -aes256 -passout pass:1234 -out rainbowhhy2_private.key 2048
提取公鑰(加密)
[root@devops openssl]# openssl rsa -in rainbowhhy2_private.key -passin pass:1234 -pubout -out rainbowhhy2_public.key
3.2.3 證書管理
3.2.3.1 生成CA證書
生成私鑰
[root@devops openssl]# openssl genrsa -out ca.key 2048
生成自簽證書
[root@devops openssl]# openssl req -new -nodes -x509 -key ca.key -days 365 -out ca.crt -subj "/C=CN/ST=Hubei/L=Wuhan/O=k8s/OU=systemGroup/CN=kubernetesEA:admin@com"
req:證書請求子命令
-new:生成證書請求命令
-x509:直接輸出證書
-key:指定私鑰檔案
-nodes:私鑰不加密
-subj:證書擁有著資訊
C:Country ,單位所在國家,為兩位數的國家縮寫,如: CN 就是中國
ST:State/Province ,單位所在州或省
L:Locality ,單位所在城市 / 或縣區
O:Organization ,網站的單位名稱
OU:Organization Unit,部門名稱,也常常用于顯示其他證書相關資訊,如證書型別,證書產品名稱或身份驗證型別或驗證內容等
CN:Common Name ,網站的域名;
EA:Email Address ,郵箱地址
同時生成私鑰和自簽證書
[root@devops openssl]# openssl req -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 3650 -out ca.crt -subj "/C=CN/ST=Hubei/L=Wuhan/O=k8s/OU=systemGroup/CN=kubernetes" [root@devops openssl]# ls ca.crt ca.key
3.2.3.2 生成CSR和CA簽名
生成私鑰
[root@devops openssl]# openssl genrsa -out ca.key 2048
生成csr
[root@devops openssl]# openssl req -new -key ca.key -out ca.csr -subj "/C=CN/ST=Hubei/L=Wuhan/O=k8s/OU=systemGroup/CN=kubernetes" [root@devops openssl]# ls ca.csr ca.key [root@devops openssl]# openssl req -text -noout -in ca.csr
生成證書
使用 CA 證書及CA密鑰 對請求簽發證書進行簽發,生成 x509證書
[root@devops openssl]# openssl x509 -req -days 3650 -in ca.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out ca.pem [root@devops openssl]# ls ca.crt ca.csr ca.key ca.pem ca.srl
4 cfssl
4.1 介紹
cfssl是 CloudFlare 公司開源的一款PKI/TLS工具,提供了命令列工具和一個 HTTP API 服務器用于簽名,驗證并且捆綁TLS證書的 HTTP API 服務, 使用Go語言撰寫,
4.2 cfssl安裝
下載工具包
[root@devops cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 [root@devops cfssl]# wget https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 [root@devops cfssl]# wget https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64 [root@devops cfssl]# chmod +x cfssl* [root@devops cfssl]# mv cfssl_linux-amd64 /usr/local/bin/cfssl_linux [root@devops cfssl]# mv cfssljson_linux-amd64 /usr/local/bin/cfssljson [root@devops cfssl]# mv cfssl-certinfo_linux-amd64 /usr/local/bin/cfssl-certinfo
命令
生成證書需要使用子命令gencert
gencert:生成新的key和簽名證書
可選引數:
-ca:指明ca的證書
-ca-key:指明私鑰檔案
-config:指明請求證書的json檔案
-profile:與-config中的profile對應,是指根據config中的profile段來生成證書的相關資訊
4.3 管理證書
4.3.1 配置CA認證
配置證書請求檔案
[root@devops cfssl]# cfssl print-defaults csr > ca-csr.json [root@devops cfssl]# vim ca-csr.json { "CN": "kubernetes", "key": { "algo": "rsa", "size": 2048 }, "names": [ { "C": "CN", "ST": "Hubei", "L": "Wuhan", "O": "k8s", "OU": "systemGroup" } ], "ca": { "expiry": "87600h" } } [root@devops cfssl]# ls ca-csr.json
CN: Common Name,瀏覽器使用該欄位驗證網站是否合法,一般寫的是域名,瀏覽器使用該欄位驗證網站是否合法
C:Country, 國家
ST:State,州,省
L: Locality,地區,城市
O:Organization Name,組織名稱,公司名稱
OU:Organization Unit Name,組織單位名稱,公司部門
生成CA證書
[root@devops cfssl]# cfssl gencert -initca ca-csr.json | cfssljson -bare ca [root@devops cfssl]# ls ca.csr ca-csr.json ca-key.pem ca.pem 生成了ca.csr, ca-key.pem, ca.pem 三個檔案
4.3.1 配置服務證書
配置服務證書生成策略
[root@devops cfssl]# cfssl print-defaults config > ca-config.json [root@devops cfssl]# vim ca-config.json { "signing": { "default": { "expiry": "87600h" }, "profiles": { "kubernetes": { "usages": [ "signing", "key encipherment", "server auth", "client auth" ], "expiry": "87600h" } } } }
默認策略,指定了證書的有效期是一年(8760h)
profile可以設定多個,這里指定kubernetes策略,指定了證書的用途
signing, 表示該證書可用于簽名其它證書;生成的 ca.pem 證書中 CA=TRUE
server auth:表示 client 可以用該 CA 對 server 提供的證書進行驗證
client auth:表示 server 可以用該 CA 對 client 提供的證書進行驗證
配置請求服務器csr檔案
[root@devops cfssl]# vim server-csr.json { "CN": "kubernetes", "hosts": [ "127.0.0.1", "192.168.10.11", "192.168.10.12", "192.168.10.13" ], "key": { "algo": "rsa", "size": 2048 }, "names": [{ "C": "CN", "ST": "Beijing", "L": "BeiJing", "O": "k8s", "OU": "System" }] } [root@devops cfssl]# ls ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem server-csr.json
生成證書
[root@devops cfssl]# cfssl gencert -ca=ca.pem -ca-key=ca-key.pem -config=ca-config.json -profile=kubernetes server-csr.json | cfssljson -bare server [root@devops cfssl]# ls ca-config.json ca.csr ca-csr.json ca-key.pem ca.pem server.csr server-csr.json server-key.pem server.pem
查看證書
[root@devops cfssl]# cfssl certinfo -cert server.pem [root@devops cfssl]# cfssl certinfo -csr server.csr [root@devops cfssl]# cfssl-certinfo -cert server.pem [root@devops cfssl]# openssl x509 -noout -text -in server.pem

轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/230869.html
標籤:Linux
