如何創(chuàng)建自簽名的 SSL 證書

先把用到的命令行放上來方便備查:
如不需要私鑰密碼旋恼,則刪掉 -des3 參數(shù)即可

自簽名:

# 1.生成私鑰
$ openssl genrsa -out server.key 2048

# 2.生成 CSR (Certificate Signing Request)
$ openssl req \
    -subj "/C=CN/ST=Tianjin/L=Tianjin/O=Mocha/OU=Mocha Software/CN=test1.sslpoc.com/emailAddress=test@mochasoft.com.cn" \
    -new \
    -key server.key \
    -out server.csr

# 3.生成自簽名證書
$ openssl x509 \
    -req \
    -days 3650 \
    -in server.csr \
    -signkey server.key \
    -out server.crt

私有 CA 簽名:

# 1.創(chuàng)建 CA 私鑰
$ openssl genrsa -out ca.key 2048

# 2.生成 CA 的自簽名證書
$ openssl req \
    -subj "/C=CN/ST=Tianjin/L=Tianjin/O=Mocha/OU=Mocha Software/CN=Server CA/emailAddress=test@mochasoft.com.cn" \
    -new \
    -x509 \
    -days 3650 \
    -key ca.key \
    -out ca.crt

# 3.生成需要頒發(fā)證書的私鑰
$ openssl genrsa -out server.key 2048

# 4.生成要頒發(fā)證書的證書簽名請求良蛮,證書簽名請求當(dāng)中的 Common Name 必須區(qū)別于 CA 的證書里面的 Common Name
$ openssl req \
    -subj "/C=CN/ST=Tianjin/L=Tianjin/O=Mocha/OU=Mocha Software/CN=test2.sslpoc.com/emailAddress=test@mochasoft.com.cn" \
    -new \
    -key server.key \
    -out server.csr

# 5.用 2 創(chuàng)建的 CA 證書給 4 生成的 簽名請求 進(jìn)行簽名
$ openssl x509 \
    -req \
    -days 3650 \
    -in server.csr \
    -CA ca.crt \
    -CAkey ca.key \
    -set_serial 01 \
    -out server.crt

注:

  • 指定證書數(shù)據(jù)內(nèi)容
-subj /C=CN/ST=Guangdong/L=Shenzhen/O=PAX/OU=Common Software/CN=Server CA/emailAddress=qiaojx@paxsz.com
  • 去掉 key 加密的輸入提示:去掉 -des3
  • 不提問:使用 -batch 參數(shù)

一、概述

本文非常簡單地展示了 SSL 的實(shí)現(xiàn)征峦,以及整個過程中,證書所扮演的角色。

1侦副、什么是證書及證書的作用

普通的 Web 傳輸污它,通過 Internet 發(fā)送未加密的數(shù)據(jù)剖踊。這樣的話,任何人使用恰當(dāng)?shù)墓ぞ叨伎梢愿Q視通訊數(shù)據(jù)的內(nèi)容衫贬。很明顯德澈,這會導(dǎo)致出現(xiàn)一些問題,尤其對于有安全和隱私比較敏感的場景祥山,如:信用卡數(shù)據(jù)圃验、銀行交易信息。SSL(Secure Socket Layer)用于加密在 Web Server 與 Web Client(最常見的是 Browser) 之間傳遞的數(shù)據(jù)流缝呕。
  
  SSL 使用非對稱加密算法(Asymmetric Cryptography)澳窑,通常指 PKI(Public Key Cryptography)。使用 PKI 創(chuàng)建兩個秘鑰供常,一個公鑰摊聋,一個私鑰。使用任何一個 Key 做的加密栈暇,必須使用另外一個進(jìn)行解密麻裁。這樣的話,使用服務(wù)器私鑰加密的數(shù)據(jù)源祈,只能通過其對應(yīng)的公鑰進(jìn)行解密煎源,以確保數(shù)據(jù)是來自服務(wù)器。
  
  為什么使用 SSL 處理數(shù)據(jù)需要證書香缺?其實(shí)從技術(shù)角度來說手销,證書并不是必需的,數(shù)據(jù)很安全图张,而且不容易被第三方解密锋拖。但是,證書對于通訊過程祸轮,扮演著至關(guān)重要的角色兽埃。證書通過可信的 CA 簽名,以確保證書的持有者與其對外所宣稱的身份一致适袜。使用未經(jīng)認(rèn)證簽名的證書柄错,數(shù)據(jù)可以被加密,但是與你通訊的一方,可能并不如你想鄙陡。沒有證書的話冕房,偽裝攻擊(Impersonation Attacks)會變得更為普遍。

2趁矾、證書的三個作用
  • 加密通信
  • 身份驗(yàn)證(驗(yàn)證對方確實(shí)是對方聲稱的對象)
  • 數(shù)據(jù)完整性(無法被修改耙册,修改了會被知)
3、自簽名證書及自簽名類型

當(dāng)由于某種原因(如:不想通過 CA 購買證書毫捣,或者僅是用于測試等情況)详拙,無法正常獲取 CA 簽發(fā)的證書。這時可以生成一個自簽名證書蔓同。使用這個臨時證書的時候饶辙,會在客戶端瀏覽器報(bào)一個錯誤,簽名證書授權(quán)未知或不可信(signing certificate authority is unknown and not trusted.)斑粱。

  • 自簽名證書
  • 私有CA簽名的證書

自簽名證書的 IssuerSubject 是一樣的

區(qū)別:
  自簽名的證書無法被吊銷弃揽,CA 簽名的證書可以被吊銷。
  能不能吊銷證書的區(qū)別在于:如果你的私鑰被黑客獲取则北,如果證書不能被吊銷矿微,則黑客可以偽裝成你與用戶進(jìn)行通信。
  如果你的規(guī)劃需要創(chuàng)建多個證書尚揣,那么使用 私有 CA 的方法比較合適涌矢,因?yàn)橹灰o所有的客戶端都安裝了 CA 的證書,那么以該證書簽名過的證書快骗,客戶端都是信任的娜庇,也就是安裝一次就夠了。
  如果你直接用
自簽名證書
方篮,你需要給所有的客戶端安裝該證書才會被信任名秀,如果你需要第二個證書,則還的挨個給所有的客戶端安裝證書2才會被信任藕溅。

二匕得、自簽名證書

第一步:生成私鑰

openssl工具集用于生成 RSA Private Key 和 CSR (Certificate Signing Request),也能用于生成自簽名證書蜈垮,用于測試目的或內(nèi)部使用。
  第一步創(chuàng)建 RSA Private Key裕照。這個秘鑰:

  • 1024 bit RSA key
  • 使用 3DES 加密
  • 使用 PEM 格式存儲攒发,ASCII,可讀

命令行:

$ openssl genrsa -des3 -out server.key 1024

執(zhí)行結(jié)果:

Generating RSA private key, 1024 bit long modulus
.........................................................++++++
........++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
第二步:從秘鑰中刪除 Passphrase

我們之前生成的私鑰晋南,是帶有 passphrase 的惠猿。這帶來一個副作用,就是需要在使用過程中輸入密碼负间。這對于一些特定場景來說會帶來一些問題偶妖。比如:Apache 的自動啟動過程姜凄,或者一些工具,甚至有沒有提供輸入 passphrase 的機(jī)會趾访。其實(shí)是可以將 3DES 的加密從秘鑰中移除的态秧,這樣,使用的過程中就不再需要輸入 passphrase扼鞋。這也帶來另一個問題申鱼,如果其他人獲取到了未加密的私鑰,對應(yīng)的證書也需要被吊銷云头,以避免帶來危害捐友。
  使用以下命令行來從秘鑰中移除 pass-phrase:

$ cp server.key server.key.org
$ openssl rsa -in server.key.org -out server.key

新創(chuàng)建的 server.key 文件中,不再包含 passphrase溃槐。

-rw-r--r-- 1 root root 745 Jun 29 12:19 server.csr
-rw-r--r-- 1 root root 891 Jun 29 13:22 server.key
-rw-r--r-- 1 root root 963 Jun 29 13:22 server.key.org
第三步:生成 CSR (Certificate Signing Request)

一旦私鑰生成匣砖,CSR (Certificate Signing Request) 就可以被生成了。CSR 可以用于以下兩種用途中的任何一種:

  • 理想地昏滴,將 CSR 發(fā)送到 CA猴鲫,例如: Thawte、Verisign影涉,會做身份驗(yàn)證变隔,并頒發(fā)簽名證書
  • 對 CSR 進(jìn)行自簽名

本文的下一部分演示就是演示 CSR 進(jìn)行自簽名的方式。

生成 CSR 的過程中蟹倾,會提示輸入一些信息匣缘,這些是證書的 X.509 屬性。其中一個提示是 Common Name (e.g., YOUR name)鲜棠,這個非常重要肌厨,這一項(xiàng)會填入 FQDN:(Fully Qualified Domain Name)完全合格域名/全稱域名,這個 FQDN 會被 SSL 保護(hù)豁陆。如果要被保護(hù)的網(wǎng)站是 https://public.akadia.com柑爸,那么輸入 public.akadia.com
  用于生成 CSR 的命令行如下:

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

執(zhí)行過程界面如下:

Country Name (2 letter code) [GB]:CH
State or Province Name (full name) [Berkshire]:Bern
Locality Name (eg, city) [Newbury]:Oberdiessbach
Organization Name (eg, company) [My Company Ltd]:Akadia AG
Organizational Unit Name (eg, section) []:Information Technology
Common Name (eg, your name or your server's hostname) []:public.akadia.com
Email Address []:martin dot zahn at akadia dot ch
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
第四步:生成自簽名證書

當(dāng)由于某種原因(如:不想通過 CA 購買證書盒音,或者僅是用于測試等情況)表鳍,無法正常獲取 CA 簽發(fā)的證書。這時可以生成一個自簽名證書祥诽。使用這個臨時證書的時候譬圣,會在客戶端瀏覽器報(bào)一個錯誤,簽名證書授權(quán)未知或不可信(signing certificate authority is unknown and not trusted.)雄坪。

生成一個可以使用 365 天的臨時證書厘熟,使用如下命令行:

$ openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

執(zhí)行結(jié)果:

Signature ok
subject=/C=CH/ST=Bern/L=Oberdiessbach/O=Akadia AG/OU=Information
Technology/CN=public.akadia.com/Email=martin dot zahn at akadia dot ch
Getting Private key

三、創(chuàng)建私有 CA ,然后用該 CA 給證書進(jìn)行簽名

第一步:創(chuàng)建 CA 私鑰
$ openssl genrsa -des3 -out ca.key 4096
第二步:生成 CA 的自簽名證書
$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt

其實(shí) CA 證書就是一個自簽名證書

第三步:生成需要頒發(fā)證書的私鑰
$ openssl genrsa -des3 -out server.key 4096
第四步:生成要頒發(fā)證書的證書簽名請求
$ openssl req -new -key server.key -out server.csr

這里注意:證書簽名請求當(dāng)中的 Common Name 必須區(qū)別于 CA 的證書里面的 Common Name

第五步:用第二步創(chuàng)建的 CA 證書給第四步生成的簽名請求進(jìn)行簽名
$ openssl x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt

四绳姨、生成證書鏈多級證書

1登澜、生成根 CA 并自簽(Common Name 填 RootCA)
$ openssl genrsa -des3 -out keys/RootCA.key 2048
$ openssl req -new -x509 -days 3650 -key keys/RootCA.key -out keys/RootCA.crt
2、生成二級 CA(Common Name 填 SecondCA)
$ openssl genrsa -des3 -out keys/secondCA.key 2048
$ openssl rsa -in keys/secondCA.key -out keys/secondCA.key
$ openssl req -new -days 3650 -key keys/secondCA.key -out keys/secondCA.csr
$ openssl ca -extensions v3_ca -in keys/secondCA.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out keys/secondCA.crt -cert keys/RootCA.crt -keyfile keys/RootCA.key
3飘庄、生成三級 CA(Common Name 填 ThirdCA)
$ openssl genrsa -des3 -out keys/thirdCA.key 2048
$ openssl rsa -in keys/thirdCA.key -out keys/thirdCA.key
$ openssl req -new -days 3650 -key keys/thirdCA.key -out keys/thirdCA.csr
$ openssl ca -extensions v3_ca -in keys/thirdCA.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out keys/thirdCA.crt -cert keys/secondCA.crt -keyfile keys/secondCA.key
4脑蠕、使用三級 CA 簽發(fā)服務(wù)器證書
$ openssl genrsa -des3 -out keys/server.key 2048
$ openssl rsa -in keys/server.key -out keys/server.key
$ openssl req -new -days 3650 -key keys/server.key -out keys/server.csr
$ openssl ca -in keys/server.csr -config /etc/pki/tls/openssl.cnf -days 3650 -out keys/server.crt -cert keys/thirdCA.crt -keyfile keys/thirdCA.key

注:

  • 指定證書數(shù)據(jù)內(nèi)容
-subj /C=CN/ST=Guangdong/L=Shenzhen/O=PAX/OU=Common Software/CN=Server CA/emailAddress=qiaojx@paxsz.com
  • 去掉 key 加密的輸入提示:去掉 -des3
  • 不提問:使用 -batch 參數(shù)

五、吊銷證書(作廢證書)

首先

$ echo 00 > /etc/pki/CA/crlnumber

一般由于用戶私鑰泄露等情況才需要吊銷一個未過期的證書竭宰。(當(dāng)然我們用本測試 CA 時其時很少用到該命令空郊,除非專門用于測試吊銷證書的情況)
假設(shè)需要被吊銷的證書文件為 cert.pem,則執(zhí)行以下命令吊銷證書:

$ openssl ca -revoke cert.pem -config /etc/pki/tls/openssl.cnf

生成證書吊銷列表文件(CRL)
準(zhǔn)備公開被吊銷的證書列表時切揭,可以生成證書吊銷列表(CRL)狞甚,執(zhí)行命令如下:

$ openssl ca -gencrl -out testca.crl -config /etc/pki/tls/openssl.cnf

還可以添加 -crldays-crlhours 參數(shù)來說明下一個吊銷列表將在多少天后(或多少小時候)發(fā)布。

可以用以下命令檢查 testca.crl 的內(nèi)容:

$ openssl crl -in testca.crl -text -noout

六廓旬、參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市孕豹,隨后出現(xiàn)的幾起案子涩盾,更是在濱河造成了極大的恐慌,老刑警劉巖励背,帶你破解...
    沈念sama閱讀 216,372評論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件春霍,死亡現(xiàn)場離奇詭異,居然都是意外死亡叶眉,警方通過查閱死者的電腦和手機(jī)址儒,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評論 3 392
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來衅疙,“玉大人莲趣,你說我怎么就攤上這事”ヒ纾” “怎么了喧伞?”我有些...
    開封第一講書人閱讀 162,415評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長绩郎。 經(jīng)常有香客問我潘鲫,道長,這世上最難降的妖魔是什么肋杖? 我笑而不...
    開封第一講書人閱讀 58,157評論 1 292
  • 正文 為了忘掉前任溉仑,我火速辦了婚禮,結(jié)果婚禮上兽愤,老公的妹妹穿的比我還像新娘彼念。我一直安慰自己,他們只是感情好浅萧,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評論 6 388
  • 文/花漫 我一把揭開白布逐沙。 她就那樣靜靜地躺著,像睡著了一般洼畅。 火紅的嫁衣襯著肌膚如雪吩案。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,125評論 1 297
  • 那天帝簇,我揣著相機(jī)與錄音徘郭,去河邊找鬼。 笑死丧肴,一個胖子當(dāng)著我的面吹牛残揉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播芋浮,決...
    沈念sama閱讀 40,028評論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼抱环,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了纸巷?” 一聲冷哼從身側(cè)響起镇草,我...
    開封第一講書人閱讀 38,887評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎瘤旨,沒想到半個月后梯啤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡存哲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評論 2 332
  • 正文 我和宋清朗相戀三年因宇,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宏胯。...
    茶點(diǎn)故事閱讀 39,690評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡羽嫡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出肩袍,到底是詐尸還是另有隱情杭棵,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評論 5 343
  • 正文 年R本政府宣布氛赐,位于F島的核電站魂爪,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏艰管。R本人自食惡果不足惜滓侍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望牲芋。 院中可真熱鬧撩笆,春花似錦捺球、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至歹鱼,卻和暖如春泣栈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背弥姻。 一陣腳步聲響...
    開封第一講書人閱讀 32,812評論 1 268
  • 我被黑心中介騙來泰國打工南片, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人庭敦。 一個月前我還...
    沈念sama閱讀 47,693評論 2 368
  • 正文 我出身青樓疼进,卻偏偏與公主長得像,于是被迫代替她去往敵國和親秧廉。 傳聞我的和親對象是個殘疾皇子颠悬,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評論 2 353

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