自簽名證書

當(dāng)我們需要在企業(yè)內(nèi)部或者測試環(huán)境中使用證書時(shí)蜜自,往往需要?jiǎng)?chuàng)建自簽名證書。Linux系統(tǒng)中的Openssl工具可以用來生成自簽名證書舟舒,實(shí)現(xiàn)通信的加密,也可以基于自簽名的CA證書模擬實(shí)際CA信任鏈的工作過程瞭吃。本文基于Openssl介紹自簽名證書的生成和應(yīng)用實(shí)踐。

自簽名證書分為自簽名私有證書和自簽名CA證書兩種涣旨。自簽名私有證書無法被吊銷歪架,自簽名CA證書可以被吊銷。能不能吊銷證書的區(qū)別在于如果私鑰不小心被惡意獲取霹陡,如果證書不能被吊銷那么黑客很有可能偽裝成受信任的客戶端與用戶進(jìn)行通信和蚪。如果你的規(guī)劃需要?jiǎng)?chuàng)建多個(gè)客戶端證書,那么使用自建 CA 簽名證書的方法比較合適烹棉,只要給所有的客戶端都安裝了 CA 根證書攒霹,那么以該 CA 根證書簽名過的客戶端證書都是信任的,不需要重復(fù)的安裝客戶端證書浆洗。

請(qǐng)注意由于是自建 CA 證書催束,在使用這個(gè)臨時(shí)證書的時(shí)候,會(huì)在客戶端瀏覽器報(bào)一個(gè)錯(cuò)誤伏社,簽名證書授權(quán)未知或不可(signing certificate authority is unknown and not trusted.)抠刺,但只要配置正確,繼續(xù)操作并不會(huì)影響正常通信摘昌。 自簽名證書的 Issuer 和 Subject 是一樣的速妖。下面就分別闡述如何使用 OpenSSL 生成這兩種自簽名證書。

生成自簽名私有證書

  1. 生成證書私鑰(Key)
#生成私鑰
openssl genrsa -out /path/to/keyfile 2048

2. 如果需要備份或者轉(zhuǎn)移私鑰第焰,需要先對(duì)私鑰進(jìn)行加密

#私鑰加密买优,用于備份或者轉(zhuǎn)移私鑰
openssl rsa -in /path/to/keyfile -des3 -out /path/to/encrypted.key

3. 生成證書請(qǐng)求文件(Certificate Sign Request)

生成 CSR 的過程中,會(huì)提示輸入一些信息挺举,包括:序列號(hào)杀赢、公鑰、用戶名稱湘纵、簽發(fā)者脂崔、CA簽名和其他一些附屬信息等。證書驗(yàn)證過程就是依賴于這信息和公鑰對(duì)應(yīng)的私鑰進(jìn)行梧喷。其中一個(gè)提示是 Common Name (e.g. YOUR name)砌左,這個(gè)非常重要,這一項(xiàng)應(yīng)填入 FQDN(Fully Qualified Domain Name)完全合格域名/全稱域名铺敌,如果您使用 SSL 加密保護(hù)網(wǎng)絡(luò)服務(wù)器和客戶端之間的數(shù)據(jù)流汇歹,舉例被保護(hù)的網(wǎng)站是 https://test.example.cn,那么此處 Common Name 應(yīng)輸入 test.example.cn

#生成證書請(qǐng)求文件(Certificate sign request)
openssl req -new -key /path/to/keyfile -out /path/to/csrfile

4. 使用上一步的證書簽名請(qǐng)求簽發(fā)證書(Certificate)

#自簽名偿凭,生成私有證書
openssl x509 -req -in /path/to/ssl.csr -signkey /path/to/ssl.key -out /path/to/ssl.crt

5. 查看證書信息

#查看證書信息
openssl x509 -in /path/to/certfile -noout -text

上面的1-4步也可以通過命令行合并為一步實(shí)現(xiàn)

openssl req -new -x509 -newkey rsa:2048 -keyout /path/to/server.key -out /path/to/server.crt

生成自簽名CA證書

創(chuàng)建自簽 CA 證書产弹,主要分為兩個(gè)部分: 創(chuàng)建CA 根證書簽發(fā)客戶端證書

創(chuàng)建CA根證書

使用 OpenSSL 可以創(chuàng)建自己的 CA弯囊,給需要驗(yàn)證的用戶或服務(wù)器頒發(fā)證書痰哨,這就需要?jiǎng)?chuàng)建一個(gè) CA 根證書胶果。默認(rèn)情況ubuntu和CentOS上都已安裝好openssl。CentOS 6.x 上有關(guān)ssl證書的目錄結(jié)構(gòu)斤斧。

/etc/pki/CA/
            newcerts    存放CA簽署(頒發(fā))過的數(shù)字證書(證書備份目錄)
            private     用于存放CA的私鑰
            crl         吊銷的證書

/etc/pki/tls/
             cert.pem    軟鏈接到certs/ca-bundle.crt
             certs/      該服務(wù)器上的證書存放目錄早抠,可以房子自己的證書和內(nèi)置證書
                   ca-bundle.crt    內(nèi)置信任的證書
             private    證書密鑰存放目錄
             openssl.cnf    openssl的CA主配置文件

在創(chuàng)建 CA 根證書之前,需要做好如下準(zhǔn)備工作:修改好 CA 的配置文件撬讽、序列號(hào)蕊连、索引等等。

touch index.txt serial
echo 01 >> serial

openssl的配置文件為openssl.cnf,一般存儲(chǔ)在/etc/pki/tls/目錄下锐秦。一定要注意配置文件中 [ policy_match ]標(biāo)簽下設(shè)定的匹配規(guī)則咪奖。有可能因?yàn)樽C書使用的工具不一樣,導(dǎo)致即使設(shè)置了csr中看起來有相同的countryName,stateOrProvinceName等酱床,但在最終生成證書時(shí)依然報(bào)錯(cuò)羊赵。一般情況下,配置文件不需要改動(dòng)扇谣。

  1. 生成根證書密鑰
# 生成CA根證書密鑰
cd /etc/pki/CA/
openssl genrsa -out ./private/ca.key 2048

2. 生成根證書請(qǐng)求

# 新建根證書請(qǐng)求
openssl req -new -in /path/to/ca.key -out ca.csr

3. 生成根證書

#自簽名昧捷,生成CA證書
openssl x509 -req -in /path/to/ca.csr -signkey /path/to/ca.key -extensions v3_ca -out /path/to/ca.crt

簽發(fā)證書

我們可以用CA根證書簽發(fā)證書,也可以創(chuàng)建中間CA罐寨,使用中間CA簽發(fā)證書靡挥。創(chuàng)建中間CA的好處是即使中間CA的私鑰泄露,造成的影響也是可控的鸯绿,我們只需要使用root CA撤銷對(duì)應(yīng)中間CA的證書即可跋破。此外root CA的私鑰可以脫機(jī)妥善保存,只需要在撤銷和更新中間CA證書時(shí)才會(huì)使用瓶蝴《痉担基于根證書創(chuàng)建中間CA與創(chuàng)建根證書過程類似。我們新建一個(gè)目錄用于保存中間證書信息舷手。

#準(zhǔn)備環(huán)境
mkdir /etc/pki/CA/intermediate
cd /etc/pki/CA/intermediate
mkdir certs crl newcerts private
chmod 700 private
touch index.txt
echo 1000 > serial

#生成密鑰
cd /etc/pki/CA
openssl genrsa -aes256 -out intermediate/private/ca.key 2048
#新建請(qǐng)求
openssl req -config intermediate_CA.cnf -sha256 -new -key intermediate/private/ca.key -out intermediate/certs/ca.csr
#簽發(fā)中間CA證書
openssl ca -config root_CA.cnf -extensions v3_ca -notext -md sha256 -in intermediate/certs/ca.csr -out intermediate/certs/ca.cert

利用根證書或者中間證書簽發(fā)客戶端證書的步驟如下:

  1. 新建證書密鑰
#新建密鑰
openssl genrsa -out /path/to/server.key 2048

2. 新建證書請(qǐng)求

#新建證書請(qǐng)求
openssl req -new -in /path/to/server.key -out /path/to/server.csr

3. CA簽發(fā)證書

#證書CA簽名
openssl x509 -req -in /path/to/server.csr -CA /path/to/ca.crt -CAkey /path/to/ca.key -CAcreateserial -out /path/to/server.crt

4. CA證書的有效性驗(yàn)證

#驗(yàn)證證書
openssl verify -CAfile /path/to/ca.crt /path/to/server.crt

#如果結(jié)果顯示OK拧簸,說明我們頒發(fā)的證書是有效的。

不同客戶端證書格式轉(zhuǎn)換

#crt,pem格式證書可用于linux/nginx/node.js格式客戶端
#p12(pkcs12)格式證書用于tomcat/java/android客戶端
#打包為p12證書
openssl pkcs12 -export -in /path/to/server.crt -inkey /path/to/server.key -out /path/to/server.p12

吊銷證書

當(dāng)證書已經(jīng)不再使用或者密鑰泄露時(shí)男窟,我們需要吊銷證書來保證服務(wù)器的安全盆赤。

#獲取要吊銷的證書的serial
openssl x509 -in /path/to/x.crt -noout -serial -subject

#對(duì)比serial與subject 信息是否與index.txt中的信息一致
#如果一致,則可以吊銷證書
openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

#如果是第一次吊銷證書歉眷,需要指定吊銷的證書編號(hào)
echo 01 >/etc/pki/CA/crlnumber

#更新吊銷證書列表
openssl ca -gencrl -out /etc/pki/CA/crl.pem

#完成后牺六,可查看吊銷的證書列表
openssl crl -in /etc/pki/CA/crl.pem -noout -text
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市汗捡,隨后出現(xiàn)的幾起案子淑际,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件庸追,死亡現(xiàn)場離奇詭異,居然都是意外死亡台囱,警方通過查閱死者的電腦和手機(jī)淡溯,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來簿训,“玉大人咱娶,你說我怎么就攤上這事∏科罚” “怎么了膘侮?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長的榛。 經(jīng)常有香客問我琼了,道長,這世上最難降的妖魔是什么夫晌? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任雕薪,我火速辦了婚禮,結(jié)果婚禮上晓淀,老公的妹妹穿的比我還像新娘所袁。我一直安慰自己,他們只是感情好凶掰,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布燥爷。 她就那樣靜靜地躺著,像睡著了一般懦窘。 火紅的嫁衣襯著肌膚如雪前翎。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天奶赠,我揣著相機(jī)與錄音鱼填,去河邊找鬼。 笑死毅戈,一個(gè)胖子當(dāng)著我的面吹牛苹丸,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播苇经,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼赘理,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了扇单?” 一聲冷哼從身側(cè)響起商模,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后施流,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體响疚,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年瞪醋,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了忿晕。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡银受,死狀恐怖践盼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情宾巍,我是刑警寧澤咕幻,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布,位于F島的核電站顶霞,受9級(jí)特大地震影響肄程,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜选浑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一绷耍、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧鲜侥,春花似錦褂始、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舀寓,卻和暖如春胆数,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背互墓。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國打工必尼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人篡撵。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓判莉,卻偏偏與公主長得像,于是被迫代替她去往敵國和親育谬。 傳聞我的和親對(duì)象是個(gè)殘疾皇子券盅,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

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