nginx配置證書和私鑰進行SSL通信驗證

image.png

@[toc]

一焕妙、背景

正常項目的私鑰和服務(wù)端證書會放在項目中或者外掛到linux服務(wù)器某個路徑下吃挑,現(xiàn)在的需求是客戶手動創(chuàng)建的新的證書,替換后項目證書仍然生效,且功能能正常使用籽慢。

目前我司采用nginx配置SSL通信驗證,具體配置在nginx安裝路徑下的nginx.conf文件猫胁,最終修改的地方是紅框這里箱亿。

image.png

1.1 秘鑰和證書是兩個東西嗎?

是的杜漠,密鑰(Key)和證書(Certificate)是兩個不同的概念极景,但它們在安全通信中通常是相關(guān)聯(lián)的。

密鑰(Key):
密鑰是用于加密和解密數(shù)據(jù)的一種數(shù)學算法驾茴。
在SSL/TLS通信中,有兩種主要類型的密鑰:公鑰和私鑰氢卡。
私鑰(Private Key)用于對數(shù)據(jù)進行加密和對由公鑰加密的數(shù)據(jù)進行解密锈至。私鑰必須保密,只有持有私鑰的一方才能解密數(shù)據(jù)译秦。
公鑰(Public Key)用于對數(shù)據(jù)進行解密和對由私鑰加密的數(shù)據(jù)進行加密峡捡。公鑰通常公開發(fā)布,用于與其他人安全地通信筑悴。

證書(Certificate):
證書是由數(shù)字證書頒發(fā)機構(gòu)(CA)簽發(fā)的一種電子文件们拙,用于驗證服務(wù)器或客戶端的身份。
證書包含了一些重要的信息阁吝,如公鑰砚婆、頒發(fā)者、有效期等突勇。
證書可以用來確保通信雙方的身份装盯,防止中間人攻擊等安全威脅。
在SSL/TLS通信中甲馋,密鑰和證書通常是配對使用的埂奈。服務(wù)器會持有私鑰,并將其與公鑰證書一起使用以向客戶端證明其身份定躏≌嘶牵客戶端則使用服務(wù)器的公鑰證書來驗證服務(wù)器的身份,并用于加密通信痊远。

1.2 介紹下nginx配置文件中參數(shù)ssl_certificate和ssl_certificate_key

答案:ssl_certificate指向的是“服務(wù)端證書”相對路徑垮抗,而ssl_certificate_key指向的是“私鑰”相對路徑。

1.3介紹下nginx支持的證書類型

目前市面上數(shù)字證書可以以多種不同的后綴格式保存拗引,常見的包括:

  • PEM(Privacy Enhanced Mail):PEM 格式是一種常見的 ASCII 編碼格式借宵,通常用于存儲證書、密鑰和其他相關(guān)數(shù)據(jù)矾削。PEM 格式的文件通常以 .pem壤玫、.cer豁护、.crt 或 .key 結(jié)尾。

  • DER(Distinguished Encoding Rules):DER 格式是一種二進制編碼格式欲间,通常用于表示 X.509 數(shù)字證書楚里。DER 格式的文件通常以 .der 或 .cer 結(jié)尾。

  • PKCS#12:PKCS#12 是一種可將證書和私鑰打包成單個加密文件的格式猎贴。PKCS#12 格式的文件通常以 .p12 或 .pfx 結(jié)尾班缎。

  • JKS(Java KeyStore):JKS 格式是 Java 中用于存儲密鑰和證書的專有格式。JKS 格式的文件通常以 .jks 結(jié)尾她渴。

  • PFX(Personal Information Exchange):PFX 格式與 PKCS#12 格式類似达址,用于將證書和私鑰打包成單個文件,通常以 .pfx 結(jié)尾趁耗。

  • PKCS#7 / P7B:PKCS#7 或 P7B 格式通常用于存儲證書鏈沉唠,它們以二進制格式存儲,并可以包含多個證書苛败。PKCS#7/P7B 格式的文件通常以 .p7b 或 .p7c 結(jié)尾满葛。

這些是常見的數(shù)字證書后綴格式,每種格式都有其特定的用途和兼容性罢屈。在使用數(shù)字證書時嘀韧,需要根據(jù)具體情況選擇合適的格式。

1.4 目前nginx支持哪種證書格式缠捌?

目前nginx支持的證書格式是.crt或者.pem格式的證書(也就是ssl_certificate后面配置的證書格式)锄贷,如果是其他類型證書需要手動轉(zhuǎn)換成.crt或者.pem格式。

1.5 nginx修改配置文件目前方式也會有所不同

  • 方式1(最常見的方式)鄙币,ssl_certificate服務(wù)端配置證書肃叶,ssl_certificate_key配置私鑰(這里差別在證書,無論證書中是否包含私鑰信息都可以這么配置生效)
server_name               10.161.29.209;
        ssl_certificate             CA/server.crt;
        ssl_certificate_key         CA/server_pkcs8.key;
image.png

1.6 介紹下不通格式的證書哪些可以包含私鑰蹦魔,哪些不能?

網(wǎng)上搜到的圖片長這樣

image.png

接下來說下我自己測試后的理解咳燕,可能會和上面不同勿决,也可能相同,我沒做過對比

  • .crt格式:包含公鑰招盲、證書信息低缩;可包含或者不包含私鑰
  • .pem格式:包含公鑰、證書信息;可包含或者不包含私鑰
  • .der格式:包含公鑰咆繁、證書信息讳推;默認不包含私鑰
  • .p12或者pfx格式:包含公鑰、證書信息玩般、可包含或者不包含私鑰
  • 其他格式尚未驗證

1.7 創(chuàng)建私鑰银觅、證書請求、證書的命令

首先需要安裝openSSL坏为,使用它可以快速創(chuàng)建私鑰究驴、證書請求、證書匀伏。

舉例創(chuàng)建自簽名證書流程:

1. 要創(chuàng)建自簽名證書洒忧,你可以使用 OpenSSL 工具。以下是使用 OpenSSL 創(chuàng)建自簽名證書的基本步驟:

2. 安裝 OpenSSL:首先帘撰,確保你的系統(tǒng)上已經(jīng)安裝了 OpenSSL 工具跑慕。你可以從 OpenSSL 官方網(wǎng)站或使用包管理器進行安裝。

openssl genpkey -algorithm RSA -out private.key

這將生成一個名為 private.key 的私鑰文件摧找。

3. 生成證書請求:接下來,使用私鑰生成一個證書請求 (CSR) 文件牢硅,其中包含了公鑰和其他相關(guān)信息蹬耘。執(zhí)行以下命令生成 CSR 文件:

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

在此過程中,你將被要求提供一些相關(guān)信息减余,如國家/地區(qū)综苔、組織名稱、通用名稱 (域名) 等位岔。請根據(jù)實際情況填寫這些信息如筛。

4. 生成自簽名證書:使用以下命令生成自簽名證書:

openssl x509 -req -in csr.csr -signkey private.key -out certificate.crt

這將使用私鑰和證書請求生成一個自簽名證書文件,名為 certificate.crt抒抬。

5. 使用證書:現(xiàn)在你已經(jīng)生成了自簽名證書 certificate.crt杨刨,可以將其用于服務(wù)器或應(yīng)用程序的 SSL/TLS 配置中。具體步驟取決于你使用的服務(wù)器軟件或編程語言擦剑。
請注意妖胀,自簽名證書不會被公共信任的根證書頒發(fā)機構(gòu)所信任,因此在使用自簽名證書時惠勒,瀏覽器或客戶端可能會顯示警告赚抡。自簽名證書更適合用于測試環(huán)境或內(nèi)部使用,而不是用于公共生產(chǎn)環(huán)境纠屋。

另外涂臣,請確保妥善保管私鑰文件和證書文件,以防止未經(jīng)授權(quán)的訪問和潛在的安全風險售担。

1.8 如何區(qū)分證書中是否包含私鑰信息

舉例說明:

我拿兩個證書文件赁遗,用記事本打開看效果署辉,如圖1中“-----BEGIN CERTIFICATE-----”這個開頭的就是公鑰信息,如圖2中“-----BEGIN PRIVATE KEY-----”包含的就是私鑰信息吼和。最簡單的鑒別方式就是用記事本打開看區(qū)別涨薪,當然有的格式是二進制編碼打開亂碼,這時候就需要去服務(wù)器指定路徑下使用命令去打開證書文件才能看到具體內(nèi)容區(qū)別炫乓。

image.png

<center><font color='red'>如圖1</font></center>

image.png

<center><font color='red'>如圖2</font></center>

1.9 多文件內(nèi)容合并文件命令操作在windows和linux下不同

  • 在 Windows 上使用type命令:
type certificate.pem server_pkcs8.key > certificate_with_key.pem

這個命令會將 certificate.pem 文件和 server_pkcs8.key 文件的內(nèi)容連接到一個新文件 certificate_with_key.pem 中刚夺。

  • 在類 Unix 系統(tǒng)(如 Linux 或 macOS)上使用 cat 命令:
cat certificate.pem server_pkcs8.key > certificate_with_key.pem

這個命令也會將 certificate.pem 文件和 server_pkcs8.key 文件的內(nèi)容連接到一個新文件 certificate_with_key.pem 中。

請確保在命令中替換 certificate.pem 和 server_pkcs8.key 為您實際的證書和私鑰文件路徑和名稱末捣。

這樣生成的 certificate_with_key.pem 文件將包含證書和私鑰信息侠姑。如果您還有其他問題或需要進一步的幫助,請告訴我箩做。

1.10 不同格式文件打開查看內(nèi)容方式

  • server_pkcs8.key私鑰莽红,可直接記事本打開

    image.png

  • server.csr證書請求文件,可直接記事本打開

    image.png

  • certificate.crt格式證書邦邦,可直接記事本打開

    image.png

  • certificate.pem格式證書安吁,可直接記事本打開

    image.png

  • certificate.der格式證書,無法直接記事本打開會亂碼燃辖,需要在服務(wù)器使用命令打開

命令:
openssl x509 -inform DER -in certificate.der -text
image.png
  • certificate.p12格式證書鬼店,無法直接記事本打開會亂碼,需要在服務(wù)器使用命令打開
命令:
openssl pkcs12 -info -in certificate.p12
image.png
  • certificate.pfx格式證書跟.p12同理黔龟,無法直接記事本打開會亂碼妇智,需要在服務(wù)器使用命令打開
命令:
openssl pkcs12 -info -in certificate.pfx
image.png

二、具體實施操作

2.1 針對方式一中nginx分別指定私鑰和證書地址

image.png

創(chuàng)建不帶私鑰信息的.crt格式的證書名氏身,命令:

openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.crt -days 7200

創(chuàng)建不帶私鑰信息的.pem格式的證書名巍棱,命令:

openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.pem -days 7200 -outform PEM

創(chuàng)建不帶私鑰信息的.der格式的證書名,命令:

openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.der -days 7200 -outform DER

2.2 針對方式二中nginx私鑰和證書統(tǒng)一指向證書地址

image.png

創(chuàng)建帶私鑰信息的.crt格式的證書名蛋欣,(思路:將原crt不帶私鑰的證書文件和私鑰合并為一個新文件航徙,其中“certificate.crt”代表你原crt文件,“server_pkcs8.key”代表私鑰豁状,“certificate_with_key.crt”代表合并后的文件)捉偏,命令:

openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.crt -days 7200
cat certificate.crt server_pkcs8.key > certificate_with_key.crt

創(chuàng)建帶私鑰信息的.pem格式的證書名(思路:crt格式、pem格式泻红、der格式都采用合并文件方式生成新文件)夭禽,命令:

openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.pem -days 7200 -outform PEM
cat certificate.pem server_pkcs8.key > certificate_with_key.pem

創(chuàng)建帶私鑰信息的.der格式的證書名(思路:crt格式、pem格式谊路、der格式都采用合并文件方式生成新文件)讹躯,命令:

openssl x509 -req -in server.csr -signkey server_pkcs8.key -out certificate.der -days 7200 -outform DER
cat certificate.der server_pkcs8.key > certificate_with_key.pem

創(chuàng)建帶私鑰信息的.p12格式的證書名(思路:它跟crt\pem\der格式不同,他采用生成.p12文件后,再轉(zhuǎn)換成pem或者crt格式)潮梯,命令:

openssl pkcs12 -export -out certificate.p12 -inkey server_pkcs8.key -in certificate.crt
openssl pkcs12 -in certificate.p12 -out p12TransformPemPri.pem -nodes
或者
openssl pkcs12 -in certificate.p12 -out p12TransformPemPri.crt -nodes

創(chuàng)建帶私鑰信息的.pfx格式的證書名(思路:跟創(chuàng)建.p12相同)骗灶,命令:

openssl pkcs12 -export -out certificate.pfx -inkey server_pkcs8.key -in certificate.crt
openssl pkcs12 -in certificate.pfx  -out pfxTransformPem.pem  -nodes
或者
openssl pkcs12 -in certificate.pfx  -out pfxTransformPem.crt  -nodes

2.3 命令中部分參數(shù)介紹

  • -req:生成證書請求(CSR)。
  • -in:指定輸入文件或數(shù)據(jù)秉馏。
  • -signkey:使用指定的私鑰進行簽名耙旦。
  • -out:指定輸出文件。
  • -outform:指定輸出格式萝究。
  • -inform:指定輸入格式免都。
  • pkcs12 -export:將證書和私鑰打包成 PKCS #12 格式。
  • -nokeys:在輸出中不包括私鑰帆竹。
  • -CAcreateserial:在生成自簽名證書時創(chuàng)建一個序列號文件绕娘。
  • -text:顯示證書或 CSR 文件的文本信息。

三栽连、重啟nginx驗證生效

  1. 進入nginx目錄
cd /home/ems/3rdparty/nginx/
  1. 驗證nginx.conf 修改是否正確
sbin/nginx -t
  1. 如果出現(xiàn) 以下內(nèi)容险领,nginx.conf即是修改正確
nginx: the configuration file /home/ems/3rdparty/nginx/nginx.conf syntax is ok 
nginx: configuration file /home/ems/3rdparty/nginx/nginx.conf test is successful
  1. 重啟nginx ,等候30s 訪問新加的域名即可秒紧。
sbin/nginx -s reload
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末绢陌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子熔恢,更是在濱河造成了極大的恐慌下面,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绩聘,死亡現(xiàn)場離奇詭異,居然都是意外死亡耗啦,警方通過查閱死者的電腦和手機凿菩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帜讲,“玉大人衅谷,你說我怎么就攤上這事∷平” “怎么了获黔?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長在验。 經(jīng)常有香客問我玷氏,道長,這世上最難降的妖魔是什么腋舌? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任盏触,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘赞辩。我一直安慰自己雌芽,他們只是感情好,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布辨嗽。 她就那樣靜靜地躺著世落,像睡著了一般。 火紅的嫁衣襯著肌膚如雪糟需。 梳的紋絲不亂的頭發(fā)上屉佳,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天,我揣著相機與錄音篮灼,去河邊找鬼忘古。 笑死,一個胖子當著我的面吹牛诅诱,可吹牛的內(nèi)容都是我干的髓堪。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼娘荡,長吁一口氣:“原來是場噩夢啊……” “哼干旁!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起炮沐,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤争群,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后大年,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體换薄,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年翔试,在試婚紗的時候發(fā)現(xiàn)自己被綠了轻要。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡垦缅,死狀恐怖冲泥,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情壁涎,我是刑警寧澤凡恍,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布,位于F島的核電站怔球,受9級特大地震影響嚼酝,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜庞溜,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一革半、第九天 我趴在偏房一處隱蔽的房頂上張望碑定。 院中可真熱鬧,春花似錦又官、人聲如沸延刘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽碘赖。三九已至,卻和暖如春外构,著一層夾襖步出監(jiān)牢的瞬間普泡,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工审编, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留撼班,地道東北人。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓垒酬,卻偏偏與公主長得像砰嘁,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子勘究,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內(nèi)容