關(guān)于HTTPS的基礎(chǔ)知識(shí)可以參考加密基礎(chǔ)知識(shí)三 TLS/SSL HTTPS流强,先搞出來(lái)本地簽名的證書(shū)啊粱胜,參考
如何用Golang在本地開(kāi)啟Https服務(wù),首先用XCA
創(chuàng)建了證書(shū)并導(dǎo)出娃承,很遺憾,失敗了,我也沒(méi)搞清原因蟆盐,不過(guò)還是把過(guò)程記錄下來(lái)吧……
一、失敗的XCA創(chuàng)建過(guò)程
用XCA(X Certificate and key management)可視化程序管理SSL 證書(shū)(1)--安裝XCA
用XCA(X Certificate and key management)可視化程序管理SSL 證書(shū)(2)--生成SSL證書(shū)請(qǐng)求
用XCA(X Certificate and key management)可視化程序管理SSL 證書(shū)(3)--創(chuàng)建自定義的憑證管理中心(Certificate Authority)
用XCA(X Certificate and key management)可視化程序管理SSL 證書(shū)(4)--用自定義的憑證管理中心(Certificate Authority)
1.去https://www.hohnstaedt.de/xca/下載后遭殉,安裝
2.如果是第一次打開(kāi)石挂,請(qǐng)點(diǎn)擊 File-->New Database,去存儲(chǔ)證書(shū)
3.選擇證書(shū)數(shù)據(jù)存儲(chǔ)的位置并命名存儲(chǔ)文件的名字险污。
4.設(shè)置密碼保護(hù)證書(shū)數(shù)據(jù)痹愚,比如123456
5.鼠標(biāo)點(diǎn)擊到“Certificate Signing Request” 分頁(yè),并點(diǎn)擊右邊的“New Request”
6.source來(lái)源頁(yè)簽保持不變蛔糯,用默認(rèn)的模板即可拯腮。點(diǎn)擊subject主體標(biāo)簽,輸入證書(shū)的信息蚁飒,比如內(nèi)部名动壤,組織名,組織單元名字淮逻,國(guó)家名琼懊,省份以及通用名字。一般內(nèi)部名和通用名字填一樣爬早,而且通用名一般都需要填寫(xiě)肩碟,因?yàn)檫@個(gè)是用來(lái)標(biāo)示當(dāng)前證書(shū)在你的組織內(nèi)部的唯一性;一般組織名和組織單元名一般和你的公司和部門(mén)相吻合凸椿,比如削祈,你屬于ibm的信息部(IT部門(mén)),那么你的組織名(organizationName)可以填寫(xiě)成:ibm脑漫,你的organizationUnitName可以填寫(xiě)成it髓抑,通用名(common name)和內(nèi)部 名字取決你證書(shū)的用途,主要用來(lái)描述你證書(shū)的功能和用途的优幸。我的這個(gè)例子中吨拍,只是我測(cè)試用的,所以我寫(xiě)成henrytest网杆。
7.生成保護(hù)證書(shū)的秘鑰:因?yàn)槲覀兪巧勺C書(shū)請(qǐng)求羹饰,那么我們需要生成一個(gè)證書(shū)對(duì)伊滋,即私鑰和共鑰,上面步驟六生成的信息是在公鑰中可以看到的队秩,
(1) 如果這個(gè)證書(shū)將來(lái)會(huì)用到公網(wǎng)的服務(wù)器上去笑旺,那么這個(gè)證書(shū)請(qǐng)求需要發(fā)送到第三方得到權(quán)威機(jī)構(gòu)(Certificate Authentication)進(jìn)行簽名,就好比我們需要把我們的戶口本拿到當(dāng)?shù)毓簿秩マk身份證一樣馍资,你可以拿這個(gè)身份證去買(mǎi)火車(chē)票筒主,去辦銀行卡,第三方的機(jī)構(gòu)承認(rèn)鸟蟹,因?yàn)槭枪簿洲k的乌妙,是大家都承認(rèn)的第三方權(quán)威機(jī)構(gòu)辦的,這時(shí)的公安局就相當(dāng)于我們SSL證書(shū)的頒發(fā)機(jī)構(gòu)建钥,當(dāng)前業(yè)界比較權(quán)威就是Thawte藤韵,Verisign公司等;
(2) 如果這個(gè)證書(shū)只是企業(yè)或者組織內(nèi)部使用熊经,一般用自己組織內(nèi)部或者個(gè)人認(rèn)可的證書(shū)中心去簽名即可荠察,我們會(huì)在下一個(gè)章節(jié)提到如何進(jìn)行自簽名,這就好比你那著你的勞動(dòng)合同去公司申請(qǐng)工牌一樣奈搜,你這個(gè)工牌只能在你組織或者公司內(nèi)部使用悉盆,你不能拿你的工牌去做火車(chē),道理一樣的馋吗。
那么私鑰是做什么的呢焕盟?私鑰就是用來(lái)保護(hù)信息用的,因?yàn)槲覀円话惆压€告訴別人宏粤,讓別人用我們的公鑰去加密數(shù)據(jù)脚翘,然后不告訴別人我們的私鑰,這樣別人用我們的公鑰加密的數(shù)據(jù)绍哎,只有我們自己能解密開(kāi)来农,因?yàn)槟J(rèn)情況下,私鑰只有我們自己知道崇堰;所以這個(gè)私鑰一定要保護(hù)好沃于,而且必須有密碼器保護(hù),這就是為什么我們?cè)诓襟E四需要設(shè)置密碼的原因了海诲。
點(diǎn)擊生成新密鑰
8.在Subject主體標(biāo)簽繁莹,點(diǎn)擊右下方OK,私鑰和證書(shū)請(qǐng)求就都創(chuàng)建好了特幔。
9.查看證書(shū)信息
10.查看私鑰基本信息
11.選擇Certificates 證書(shū)頁(yè)簽咨演,點(diǎn)擊新建證書(shū),先不要點(diǎn)OK
切換到主體頁(yè)簽蚯斯,這里和之前步驟一樣薄风,填寫(xiě)證書(shū)信息饵较,創(chuàng)建私鑰
切換到擴(kuò)展頁(yè)簽注意,Type一定要選擇為“Certificate Authority”遭赂,這樣創(chuàng)建的此證書(shū)才能真正算是憑證管理中心的證書(shū)類(lèi)型循诉。同時(shí),在這個(gè)頁(yè)面也允許我們?cè)O(shè)置此證書(shū)的有效期限嵌牺,默認(rèn)情況下是以當(dāng)前的時(shí)間為起點(diǎn)打洼,在Time Range(時(shí)間范圍)里面填上你希望的證書(shū)有效期限龄糊,默認(rèn)單位為Year(年)逆粹,你也可以根據(jù)你的需要設(shè)置成months(月),日(Days),在當(dāng)前的例子中炫惩,我設(shè)置成10年僻弹。一定要點(diǎn)擊后面的“Apply”*(應(yīng)用)按鈕,否則填入的數(shù)字不生效他嚷。
其他的標(biāo)簽頁(yè)面配置保持不變蹋绽,然后點(diǎn)擊OK 按鈕,自己的定義的憑證管理中心(Certificate Authority)就創(chuàng)建成功了步咪。
12.點(diǎn)擊“Certificate Signing Requests”標(biāo)簽頁(yè)面中袋倔,選擇你需要進(jìn)行簽名的證書(shū)請(qǐng)求
目前是未處理狀態(tài)敞掘,這表示此證書(shū)還未被簽名。選擇需要簽名的證書(shū)蚣抗,并點(diǎn)擊右鍵,在彈出的菜單中瓮下,選擇“Sign”簽發(fā)
13.把證書(shū)導(dǎo)出后翰铡,然后參考Google Chrome安裝證書(shū)的方法,把證書(shū)安裝到瀏覽器
14.使用以下程序來(lái)測(cè)試,失敗了……
package main
import (
"fmt"
"net/http"
)
func hello(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.Proto) //打印http協(xié)議版本
if _, err := w.Write([]byte("<h1>hello world,tom!</h1>")); err != nil {
fmt.Println(err.Error())
}
}
func main() {
http.HandleFunc("/hello", hello)
if err := http.ListenAndServeTLS(":8080", "./server.pem", "./server.key", nil); err != nil {
fmt.Println(err.Error())
}
}
二讽坏、使用OpenSSL來(lái)創(chuàng)建
這次參考看完這篇文章后還不會(huì)windows下生成自簽名https安全證書(shū)的話锭魔,你就打死我表弟,在https://slproweb.com/products/Win32OpenSSL.html下載了win64版本
解壓到了d:tool 目錄下 然后進(jìn)入OpenSSL-Win64的bin目錄路呜,雙擊openssl.exe進(jìn)入命令行界面迷捧,輸入下面命令
openssl genrsa -des3 -out server.key 2048
生成key文件,這里提示需要輸入密碼胀葱,直接輸入123456就好了党涕,ps:網(wǎng)上好多都是1024強(qiáng)度加密的,因?yàn)椴┛捅容^古老了巡社,現(xiàn)在加密可以使用2048了
接下來(lái)就要使用key文件生成csr文件了
正常的CA認(rèn)證我不了解膛堤,但是知道很貴,但是我這個(gè)因?yàn)槭亲约汗緝?nèi)網(wǎng)供內(nèi)部使用的晌该,所以使用了自簽名
接著上面的命令行輸入
openssl req -new -key server.key -out server.csr
這里會(huì)讓你輸入幾個(gè)參數(shù)肥荔,參數(shù)說(shuō)明
Country Name (2 letter code) [AU]:CN #國(guó)家
State or Province Name (full name) [Some-State]:Beijing #省
Locality Name (eg, city) []:Beijing #市
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Ncda #公司
Organizational Unit Name (eg, section) []:IT #部門(mén)
Common Name (e.g. server FQDN or YOUR name) []:localhost #域名 這里需要輸入服務(wù)器的域名
Email Address []:kong.weisheng@nidec.com #郵箱
然后還要輸入兩個(gè)密碼 這里輸入123456就好 好記而且反正一會(huì)要?jiǎng)h除
刪除密碼绿渣,如果不刪除的話每次啟動(dòng)服務(wù)器都會(huì)讓你輸入密碼,還是刪了好燕耿,嗯中符,刪了好
openssl rsa -in server.key -out server_no_passwd.key
這里需要輸入之前的密碼 我的是:123456
這時(shí)候,bin目錄下應(yīng)該多了server.key誉帅、server.csr淀散、server_no_passwd.key 這三個(gè)文件了
接下來(lái)要生成自簽名文件了,命令行繼續(xù)輸入
openssl x509 -req -days 365 -in server.csr -signkey server_no_passwd.key -out server.crt
這樣蚜锨,crt證書(shū)就生成好了档插,參照上文,安裝到瀏覽器亚再,拿Go代碼再跑一次郭膛,又失敗了……
三、在linux下跑openssl命令
這次是參考了一個(gè)視頻【Golang-GIN】使用openssl生成證書(shū)并配置https http2.0,博主提供了命令:
openssl genrsa -out ./server.key 2048
openssl req -new -x509 -key ./server.key -out ./server.pem -days 365
我試了氛悬,還是不行则剃。仔細(xì)觀察一下,人家是在linux下跑的命令如捅。
參考Win10搭建Linux子系統(tǒng)棍现,在linux下重新生成證書(shū),終于OK了>登病己肮!
這里如果瀏覽器提示不安全,點(diǎn)繼續(xù)即可