主頁 > 作業系統 > SSL證書介紹并使用openssl和cfssl生成SSL證書

SSL證書介紹并使用openssl和cfssl生成SSL證書

2020-12-07 06:08:08 作業系統

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

上一篇:Activation of org.freedesktop.systemd1 timed out

下一篇:CentOS 8.2上部署NFS服務器和客戶端

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • CA和證書

    1、在 CentOS7 中使用 gpg 創建 RSA 非對稱密鑰對 gpg --gen-key #Centos上生成公鑰/密鑰對(存放在家目錄.gnupg/) 2、將 CentOS7 匯出的公鑰,拷貝到 CentOS8 中,在 CentOS8 中使用 CentOS7 的公鑰加密一個檔案 gpg -a ......

    uj5u.com 2020-09-10 00:09:53 more
  • Kubernetes K8S之資源控制器Job和CronJob詳解

    Kubernetes的資源控制器Job和CronJob詳解與示例 ......

    uj5u.com 2020-09-10 00:10:45 more
  • VMware下安裝CentOS

    VMware下安裝CentOS 一、軟硬體準備 1 Centos鏡像準備 1.1 CentOS鏡像下載地址 下載地址 1.2 CentOS鏡像下載程序 點擊下載地址進入如下圖的網站,選擇需要下載的版本,這里選擇的是Centos8,點擊如圖所示。 決定選擇Centos8后,選擇想要的鏡像源進行下載,此 ......

    uj5u.com 2020-09-10 00:12:10 more
  • 如何使用Grep命令查找多個字串

    如何使用Grep 命令查找多個字串 大家好,我是良許! 今天向大家介紹一個非常有用的技巧,那就是使用 grep 命令查找多個字串。 簡單介紹一下,grep 命令可以理解為是一個功能強大的命令列工具,可以用它在一個或多個輸入檔案中搜索與正則運算式相匹配的文本,然后再將每個匹配的文本用標準輸出的格式 ......

    uj5u.com 2020-09-10 00:12:28 more
  • git配置http代理

    git配置http代理 經常遇到克隆 github 慢的問題,這里記錄一下幾種配置 git 代理的方法,解決 clone github 過慢。 目錄 git配置代理 git單獨配置github代理 git配置全域代理 配置終端環境變數 git配置代理 主要使用 git config 命令 git單獨 ......

    uj5u.com 2020-09-10 00:12:33 more
  • Linux npm install 裝包時提示Error EACCES permission denied解

    npm install 裝包時提示Error EACCES permission denied解決辦法 ......

    uj5u.com 2020-09-10 00:12:53 more
  • Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包

    Centos 7下安裝nginx,使用yum install nginx,提示沒有可用的軟體包。 18 (flaskApi) [root@67 flaskDemo]# yum -y install nginx 19 已加載插件:fastestmirror, langpacks 20 Loading ......

    uj5u.com 2020-09-10 00:13:13 more
  • Linux查看服務器暴力破解ssh IP

    在公網的服務器上經常遇到別人爆破你服務器的22埠,用來挖礦或者干其他嘿嘿嘿的事情~ 這種情況下正確的做法是: 修改默認ssh的22埠 使用設定密鑰登錄或者白名單ip登錄 建議服務器密碼為復雜密碼 創建普通用戶登錄服務器(root權限過大) 建立堡壘機,實作統一管理服務器 統計爆破IP [root ......

    uj5u.com 2020-09-10 00:13:17 more
  • CentOS 7系統常見快捷鍵操作方式

    Linux系統中一些常見的快捷方式,可有效提高操作效率,在某些時刻也能避免操作失誤帶來的問題。 ......

    uj5u.com 2020-09-10 00:13:31 more
  • CentOS 7作業系統目錄結構介紹

    作業系統存在著大量的資料檔案資訊,相應檔案資訊會存在于系統相應目錄中,為了更好的管理資料資訊,會將系統進行一些目錄規劃,不同目錄存放不同的資源。 ......

    uj5u.com 2020-09-10 00:13:35 more
最新发布
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:43:21 more
  • vim的常用命令

    Vim的6種基本模式 1. 普通模式在普通模式中,用的編輯器命令,比如移動游標,洗掉文本等等。這也是Vim啟動后的默認模式。這正好和許多新用戶期待的操作方式相反(大多數編輯器默認模式為插入模式)。 2. 插入模式在這個模式中,大多數按鍵都會向文本緩沖中插入文本。大多數新用戶希望文本編輯器編輯程序中一 ......

    uj5u.com 2023-04-20 08:42:36 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:26:53 more
  • 設定Windows主機的瀏覽器為wls2的默認瀏覽器

    這里以Chrome為例。 1. 準備作業 wsl是可以使用Windows主機上安裝的exe程式,出于安全考慮,默認情況下改功能是無法使用。要使用的話,終端需要以管理員權限啟動。 我這里以Windows Terminal為例,介紹如何默認使用管理員權限打開終端,具體操作如下圖所示: 2. 操作 wsl ......

    uj5u.com 2023-04-19 09:25:49 more
  • docker學習

    ###Docker概述 真實專案部署環境可能非常復雜,傳統發布專案一個只需要一個jar包,運行環境需要單獨部署。而通過Docker可將jar包和相關環境(如jdk,redis,Hadoop...)等打包到docker鏡像里,將鏡像發布到Docker倉庫,部署時下載發布的鏡像,直接運行發布的鏡像即可。 ......

    uj5u.com 2023-04-19 09:19:04 more
  • Linux學習筆記

    IP地址和主機名 IP地址 ifconfig可以用來查詢本機的IP地址,如果不能使用,可以通過install net-tools安裝。 Centos系統下ens33表示主網卡;inet后表示IP地址;lo表示本地回環網卡; 127.0.0.1表示代指本機;0.0.0.0可以用于代指本機,同時在放行設 ......

    uj5u.com 2023-04-18 06:52:01 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:50 more
  • 解決linux系統的kdump服務無法啟動的問題

    問題:專案麒麟系統服務器的kdump服務無法啟動,沒有相關日志無法定位問題。 1、查看服務狀態是關閉的,重啟系統也無法啟動 systemctl status kdump 2、修改grub引數,修改“crashkernel”為“512M(有的機器數值太大太小都會導致報錯,建議從128M開始試,或者加個 ......

    uj5u.com 2023-04-12 09:59:01 more
  • 你是不是暴露了?

    作者:袁首京 原創文章,轉載時請保留此宣告,并給出原文連接。 如果您是計算機相關從業人員,那么應該經歷不止一次網路安全專項檢查了,你肯定是收到過資訊系統技術檢測報告,要求你加強風險監測,確保你提供的系統服務堅實可靠了。 沒檢測到問題還好,檢測到問題的話,有些處理起來還是挺麻煩的,尤其是線上正在運行的 ......

    uj5u.com 2023-04-05 16:52:56 more
  • 細節拉滿,80 張圖帶你一步一步推演 slab 記憶體池的設計與實作

    1. 前文回顧 在之前的幾篇記憶體管理系列文章中,筆者帶大家從宏觀角度完整地梳理了一遍 Linux 記憶體分配的整個鏈路,本文的主題依然是記憶體分配,這一次我們會從微觀的角度來探秘一下 Linux 內核中用于零散小記憶體塊分配的記憶體池 —— slab 分配器。 在本小節中,筆者還是按照以往的風格先帶大家簡單 ......

    uj5u.com 2023-04-05 16:44:11 more