openssl為IP簽發(fā)證書(shū)(支持多IP/內(nèi)外網(wǎng))

參考文檔
1. OpenSSL自簽發(fā)配置有多域名或ip地址的證書(shū)
2. 如何創(chuàng)建一個(gè)自簽名的SSL證書(shū)(X509)
3. 如何創(chuàng)建自簽名證書(shū)轨蛤?

背景

  • 開(kāi)啟https必須要有ssl證書(shū),而安全的證書(shū)來(lái)源于受信任的CA機(jī)構(gòu)簽發(fā)虫埂,通常需要付費(fèi)祥山,并且他們只能為域名和外網(wǎng)IP簽發(fā)證書(shū)。
  • 證書(shū)有兩個(gè)基本目的:分發(fā)公有密鑰和驗(yàn)證服務(wù)器的身份掉伏。只有當(dāng)證書(shū)是由受信任的第三方所簽署的情形下缝呕,服務(wù)器的身份才能得到恰當(dāng)驗(yàn)證澳窑,因?yàn)槿魏喂粽叨伎梢詣?chuàng)建自簽名證書(shū)并發(fā)起中間人攻擊。
  • 但自簽名證書(shū)可應(yīng)用于以下背景:
    • 企業(yè)內(nèi)部網(wǎng)岳颇。當(dāng)客戶只需要通過(guò)本地企業(yè)內(nèi)部網(wǎng)絡(luò)時(shí)照捡,中間人攻擊幾乎是完全沒(méi)有機(jī)會(huì)的颅湘。
    • 開(kāi)發(fā)服務(wù)器话侧。當(dāng)你只是在開(kāi)發(fā)或測(cè)試應(yīng)用程序時(shí),花費(fèi)額外的金錢去購(gòu)買受信任的證書(shū)是完全沒(méi)有必要的闯参。
    • 訪問(wèn)量很小的個(gè)人站點(diǎn)瞻鹏。如果你有一個(gè)小型個(gè)人站點(diǎn),而該站點(diǎn)傳輸?shù)氖遣恢匾男畔⒙拐敲垂粽吆苌贂?huì)有動(dòng)機(jī)去攻擊這些連接新博。

依賴

利用 OpenSSL 簽發(fā)證書(shū)需要 OpenSSL 軟件及庫(kù),一般情況下 CentOS脚草、Ubuntu 等系統(tǒng)均已內(nèi)置赫悄, 可執(zhí)行 openssl 確認(rèn),如果提示 oepnssl: command not found,則需手動(dòng)安裝馏慨,以Centos為例:

yum install openssl openssl-devel -y

簽發(fā)證書(shū)

step1: 生成證書(shū)請(qǐng)求文件

新建openssl.cnf埂淮,內(nèi)容如下:

[req]
distinguished_name = req_distinguished_name
req_extensions = v3_req

[req_distinguished_name]
countryName = Country Name (2 letter code)
countryName_default = CH
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = GD
localityName = Locality Name (eg, city)
localityName_default = ShenZhen
organizationalUnitName  = Organizational Unit Name (eg, section)
organizationalUnitName_default  = organizationalUnitName
commonName = Internet Widgits Ltd
commonName_max  = 64

[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]

# 改成自己的域名
#DNS.1 = kb.example.com
#DNS.2 = helpdesk.example.org
#DNS.3 = systems.example.net

# 改成自己的ip
IP.1 = 172.16.24.143
IP.2 = 172.16.24.85


step2: 生成私鑰

san_domain_com 為最終生成的文件名,一般以服務(wù)器命名写隶,可改倔撞。

openssl genrsa -out san_domain_com.key 2048

step3: 創(chuàng)建CSR文件

創(chuàng)建CSR文件命令:

openssl req -new -out san_domain_com.csr -key san_domain_com.key -config openssl.cnf

執(zhí)行后,系統(tǒng)會(huì)提示輸入組織等信息慕趴,按提示輸入如即可痪蝇。

測(cè)試CSR文件是否生成成功,可以使用下面的命令:

openssl req -text -noout -in san_domain_com.csr

//執(zhí)行后冕房,會(huì)看到類似如下的信息:
Certificate Request:
    Data:
        Version: 0 (0x0)
        Subject: C=US, ST=MN, L=Minneapolis, OU=Domain Control Validated, CN=zz
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                //...

step4: 自簽名并創(chuàng)建證書(shū)

openssl x509 -req -days 3650 -in san_domain_com.csr -signkey san_domain_com.key -out san_domain_com.crt -extensions v3_req -extfile openssl.cnf

執(zhí)行后躏啰,可看到本目錄下多了以下三個(gè)文件

san_domain_com.crt

san_domain_com.csr

san_domain_com.key

至此,使用openssl生成證書(shū)已完成耙册,以下 nodejs項(xiàng)目驗(yàn)證將證書(shū)導(dǎo)入本地 僅是驗(yàn)證證書(shū)是否正潮螅可用。

利用nodejs項(xiàng)目驗(yàn)證證書(shū)是否可行

step1. 環(huán)境

安裝node和npm.

step2. 項(xiàng)目結(jié)構(gòu)

ssl-test
├─ cert   //打包所需靜態(tài)資源
│  ├─ san_domain_com.crt
│  └─ san_domain_com.key
├─ package.json
└─ https.js

step3. https.js

文件內(nèi)容如下:

'use strict'
var https = require("https");
var fs = require('fs');
var options = {
    key: fs.readFileSync("./cert/san_domain_com.key", 'utf8'),
    cert: fs.readFileSync("./cert/san_domain_com.crt", 'utf8')
};

var app = https.createServer(options, function (req, res) {
    res.writeHead(200, {'Cntent-Type': 'text/plain'});

    res.end('Https !')
}).listen(443, '0.0.0.0');

step4. 啟動(dòng)項(xiàng)目

執(zhí)行以下命令:

node https.js

執(zhí)行后觅玻,即可訪問(wèn) https://127.0.0.1想际,chrome瀏覽器上點(diǎn)擊“不安全”->"證書(shū)",即可查看證書(shū)詳細(xì)溪厘。

1.png

將證書(shū)導(dǎo)入本地(windows)

上一步中胡本,使用chrome訪問(wèn) https://127.0.0.1 提示了“不安全”。

  • 對(duì)于web端用戶畸悬,可以“手動(dòng)點(diǎn)擊信任”來(lái)繞過(guò)此提示侧甫。
  • 但安卓端、C++等終端需要調(diào)用https站點(diǎn)的API時(shí),他們應(yīng)該如何解決披粟?有以下兩種方式:
    • 客戶端在代碼層面直接忽略掉不安全的提示咒锻。(不提倡,某些惡意網(wǎng)站可能也會(huì)被忽略)
    • san_domain_com.crt證書(shū)導(dǎo)入到客戶端中守屉。

此處惑艇,以瀏覽器作為客戶端演示如何將證書(shū)設(shè)置為受信任的證書(shū)。

step1. 環(huán)境

windows 7系統(tǒng)拇泛、chrome瀏覽器

step2. 背景

  • 為什么使用自簽發(fā)的證書(shū)時(shí)會(huì)提示不安全滨巴?

因?yàn)椴僮飨到y(tǒng)上會(huì)默認(rèn)存有受信任機(jī)構(gòu)CA的證書(shū)“嘲龋—— 電腦的“運(yùn)行”工具彈窗->輸入"certmgr.msc"
而我們自簽發(fā)的證書(shū)不在這個(gè)信任列表中恭取,需要手動(dòng)導(dǎo)入到這個(gè)“白名單”中。

2.png
  • https的認(rèn)證流程是什么樣子的熄守?
image.png

你可能會(huì)問(wèn)蜈垮,為什么是這樣的流程?詳見(jiàn)下一篇文章
https誕生背景及原理解析

step3. 導(dǎo)入證書(shū)

右鍵"受信任的證書(shū)頒發(fā)機(jī)構(gòu)"->"所有任務(wù)"->"導(dǎo)入"裕照,按照提示選擇san_domain_com.crt文件即可攒发。

1.png

清除緩存,重啟瀏覽器牍氛,瀏覽https://127.0.0.1晨继,不再提示不安全了。


image.png

至此搬俊,完成了證書(shū)的生成和客戶端的導(dǎo)入驗(yàn)證紊扬。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市唉擂,隨后出現(xiàn)的幾起案子餐屎,更是在濱河造成了極大的恐慌,老刑警劉巖玩祟,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腹缩,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡空扎,警方通過(guò)查閱死者的電腦和手機(jī)藏鹊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)转锈,“玉大人盘寡,你說(shuō)我怎么就攤上這事〈榭” “怎么了竿痰?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵脆粥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我影涉,道長(zhǎng)变隔,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任蟹倾,我火速辦了婚禮匣缘,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘喊式。我一直安慰自己孵户,他們只是感情好萧朝,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開(kāi)白布岔留。 她就那樣靜靜地躺著,像睡著了一般检柬。 火紅的嫁衣襯著肌膚如雪献联。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 49,806評(píng)論 1 290
  • 那天何址,我揣著相機(jī)與錄音里逆,去河邊找鬼。 笑死用爪,一個(gè)胖子當(dāng)著我的面吹牛原押,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播偎血,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼诸衔,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了颇玷?” 一聲冷哼從身側(cè)響起笨农,我...
    開(kāi)封第一講書(shū)人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帖渠,沒(méi)想到半個(gè)月后谒亦,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡空郊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年份招,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狞甚。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锁摔,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出入愧,到底是詐尸還是另有隱情鄙漏,我是刑警寧澤嗤谚,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布,位于F島的核電站怔蚌,受9級(jí)特大地震影響巩步,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜桦踊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一椅野、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧籍胯,春花似錦竟闪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蝶涩,卻和暖如春理朋,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背绿聘。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工嗽上, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人熄攘。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓兽愤,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親挪圾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子浅萧,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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