使用OpenSSL生成證書並配置Https

2022-03-13 10:12:03 字數 3755 閱讀 4160

在證書申請簽發過程中,客戶端涉及到金鑰、證書請求、證書這幾個概念。我們以申請證書的流程說明三者的關係。客戶端(相對於ca)在申請證書的時候,大體上有三個步驟:

第一步:生成客戶端的金鑰,即客戶端的公私鑰對,且要保證私鑰只有客戶端自己擁有。

第二步:以客戶端的金鑰和客戶端自身的資訊(國家、機構、網域名稱、郵箱等)為輸入,生成證書請求檔案。其中客戶端的公鑰和客戶端資訊是明文儲存在證書請求檔案中的,而客戶端私鑰的作用是對客戶端公鑰及客戶端資訊做簽名,自身是不包含在證書請求中的。然後把證書請求檔案傳送給ca機構。

第三步:ca機構接收到客戶端的證書請求檔案後,首先校驗其簽名,然後審核客戶端的資訊,最後ca機構使用自己的私鑰為證書請求檔案簽名,生成證書檔案,下發給客戶端。此證書就是客戶端的身份證,來表明使用者的身份。

openssl安裝有兩種方式,一種編譯安裝:

安裝完成後,可以設定環境變數,也可以不設定環境變數,設定環境變數的好處是:在任意位置通過cmd命令列視窗都可以執行openssl命令,而沒有設定環境變數則需要進入openssl安裝目錄進行命令列的操作

首先進入cmd 進入openssl的安裝目錄下的 bin 目錄(以配置過環境變數的可以省略這一步)

生成私鑰(.key)-->生成證書請求(.csr)-->用ca根證書簽名得到證書(.crt)

1.建立資料夾

在openssl安裝目錄下的bin目錄內新建 democa 目錄,再在 democa目錄內新建  newcerts目錄

並且在 democa 資料夾內新建乙個空的 index.text  檔案

再建立乙個 serial檔案 裡面寫 01

2.生成根證書

#生成私鑰

openssl genrsa -des3 -out root.key 1024

輸入命令,回車 會提示輸入密碼,我設定的密碼是123456,之後只要是提示輸入密碼的,都預設是123456,同時可以看到openssl安裝目錄下多了乙個root.key檔案

# 生成根證書 並且 自簽名

openssl req -new -x509 -key root.key -out root.crt -config openssl.cfg

接下來會提示輸入密碼,還輸入預設的密碼就可以,接下來還會讓輸入一些基本資訊

但是只有紅框部分的資訊才是最重要的,其他都可以忽略不填,填完之後,發現openssl目錄下又多了乙個root.crt檔案

2、服務端證書生成(生成的證書需要配置到nginx或者apache httpserver)

#生成私鑰

openssl genrsa -des3 -out server.key 1024

去除key的密碼:

為什麼要去除server.key的密碼呢?這邊不是去除而是代表這個證書在被應用程式啟動時不需要顯示的提示使用者輸入口令,要不然我們會出現下面這種情況

也就是假如你配置好了https,當你啟動nginx時會讓你輸入密碼,所以這一步做的就是啟動web server免去輸入口令的操作

接下來生成證書,同樣也會提示輸入密碼

#生成服務端證書

openssl req -new -key server.key -out server.csr

提示輸入密碼,提示完成之後,又讓你填寫一大堆資訊,跟生成root.csr是一樣的,需要注意的一點是,這裡填寫的資訊需要跟生成root.csr填寫的資訊要一致

這個時候,我們看openssl的安裝目錄,發現多了兩個檔案,乙個server.key 乙個server.csr ,

但是為什麼這個server.csr為什麼跟root.csr的圖示不一樣呢?(當然不僅僅是因為字尾名不一致的問題),主要是因為因為root.crt是經過簽名的(自簽名),而server.csr沒有經過簽名

接下來要做的就是讓root.crt和root.key給server.csr進行簽名(其實這個過程就是模擬,ca機構進行簽名【那個要收費】)

3、使用root.crt和root.key給server.csr進行簽名

#使用根證書進行簽名

再次檢視已經生成了server.crt檔案了

3、生成客戶端證書

openssl genrsa -des3 -out client.key 1024openssl req -new -key client.key -out client.csr

openssl ca -in client.csr -out client.crt -cert root.crt -keyfile root.key -config openssl.cfg

4、證書轉換

openssl pkcs12 -export -in server.crt -inkey server.key
證書類別 

- 根證書 生成伺服器證書,客戶端證書的基礎。自簽名。 

- 伺服器證書 由根證書簽發。配置在伺服器上。 

- 客戶端證書 由根證書簽發。配置在伺服器上,並傳送給客戶,讓客戶安裝在瀏覽器裡。

要注意, 

1. 伺服器證書的cn要和servername一致,否則啟動httpd時有警告。 

2. 瀏覽器安裝客戶端證書時,需要用pkcs12轉換成pfx格式,否則可以安裝但無效。 

3. 把根證書安裝到瀏覽器的受信ca中,訪問伺服器時就不會出警告了。

我這裡使用的是window版的nginx,如果需要配置linux版的nginx,可能需要重新編譯新增ssl模組,具體看 :

開啟nginx.cnf 找到 https server

}

標註橘色的部分,表示剛才生成的證書檔案和key的位置,要寫相對路徑,建議將這兩個檔案放到nginx配置檔案的同級目錄,寫絕對路徑可能會報錯

使用OpenSSL生成證書

step 1.create key password protected openssl genrsa out prvtkey.pem 1024 2038 with outpassword protected openssl genrsa des3 out prvtkey.pem 1024 2048...

使用OpenSSL生成證書

step 1.create key password protected openssl genrsa out prvtkey.pem 1024 2038 with outpassword protected openssl genrsa des3 out prvtkey.pem 1024 2048...

OpenSSL生成證書

要生成證書的目錄下建立幾個檔案和資料夾,有.democa democa newcerts democa index.txt democa serial,在serial檔案中寫入第乙個序列號 01 1.生成x509格式的ca自簽名證書 opensslreq new x509 keyout ca.key...