免費!讓Https證書不再成為煩惱|世界播資訊
書承上回,上期寫了《實戰(zhàn)goproxy為中國steam登錄加速》后,總是覺得服務(wù)端獲取到的客戶端信息太少了,為了獲取更多的客戶端信息,就需要解包設(shè)置一個中間代理人,我簡簡單單的用《Lego》申請了證書,兩種申請方式:
一種直接就是cli,一種是代碼內(nèi)申請直接使用。
####獻上letsencrypt的申請證書的工作原理,就知道為什么有申請和挑戰(zhàn)的環(huán)節(jié)了:
【資料圖】
先介紹Lego 的 cli方式獲取證書與更新證書#通過源碼進行安裝goinstallgithub.com/go-acme/lego/v4/cmd/lego@latest#-----------------申請證書-----------------lego--email="87066062@qq.com"--domains="www.laghaim.cn"--httprun#申請的證書有效期為90天#申請成功后就會獲得一下文件了。#www.laghaim.cn.crt#www.laghaim.cn.issuer.crt#www.laghaim.cn.json#www.laghaim.cn.key#-----------------更新證書-----------------lego--email="87066062@qq.com"--domains="www.laghaim.cn"--httprenew#但是此時需要注意,這時續(xù)訂必須要小于30天#如果想提前更新證書,指定剩余天數(shù)即可:lego--email="87066062@qq.com"--domains="www.laghaim.cn"--httprenew--days45
如果想自動續(xù)租,寫個crontab就可以咯。
接下來就是利用Lego的庫代碼進行申請證書和續(xù)訂證書關(guān)鍵地方我都進行了注釋,我喜歡一次性把整段代碼貼出來,大家也可以直接粘貼整段對部分常量參數(shù)進行修改后,直接調(diào)用GetCertificateFromLego()函數(shù):
packageget_certificate_from_legoimport("crypto""crypto/ecdsa""crypto/elliptic""crypto/rand""github.com/go-acme/lego/v4/certcrypto""github.com/go-acme/lego/v4/certificate""github.com/go-acme/lego/v4/challenge/http01""github.com/go-acme/lego/v4/challenge/tlsalpn01""github.com/go-acme/lego/v4/lego""github.com/go-acme/lego/v4/registration")const(EmailStr="87066062@qq.com"http://修改為自己的電子郵件OneDomain="www.laghaim.cn"http://修改為自己的域名)typeMyUserstruct{EmailstringRegistration*registration.Resourcekeycrypto.PrivateKey}func(u*MyUser)GetEmail()string{returnu.Email}func(uMyUser)GetRegistration()*registration.Resource{returnu.Registration}func(u*MyUser)GetPrivateKey()crypto.PrivateKey{returnu.key}funcGetCertificateFromLego()(*certificate.Resource,error){//創(chuàng)建myUser用戶對象。新對象需要email和私鑰才能啟動,私鑰我們自己生成privateKey,err:=ecdsa.GenerateKey(elliptic.P256(),rand.Reader)iferr!=nil{returnnil,err}myUser:=MyUser{Email:EmailStr,key:privateKey,}config:=lego.NewConfig(&myUser)//這里配置密鑰的類型和密鑰申請的地址,記得上線后替換成lego.LEDirectoryProduction,測試環(huán)境下就用lego.LEDirectoryStagingconfig.CADirURL=lego.LEDirectoryStagingconfig.Certificate.KeyType=certcrypto.RSA2048//創(chuàng)建一個client與CA服務(wù)器通信client,err:=lego.NewClient(config)iferr!=nil{returnnil,err}//這里需要挑戰(zhàn)我們申請的證書,必須監(jiān)聽80和443端口,這樣才能讓Let"sEncrypt訪問到咱們的服務(wù)器err=client.Challenge.SetHTTP01Provider(http01.NewProviderServer("","80"))iferr!=nil{returnnil,err}err=client.Challenge.SetTLSALPN01Provider(tlsalpn01.NewProviderServer("","443"))iferr!=nil{returnnil,err}//把這個客戶端注冊,傳遞給myUser用戶里reg,err:=client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed:true})iferr!=nil{returnnil,err}myUser.Registration=regrequest:=certificate.ObtainRequest{Domains:[]string{OneDomain},//這里如果有多個,就寫多個就好了,可以是多個域名Bundle:true,//這里如果是true,將把頒發(fā)者證書一起返回,也就是返回里面certificates.IssuerCertificate}//開始申請證書certificates,err:=client.Certificate.Obtain(request)iferr!=nil{returnnil,err}//申請完了后,里面會帶有證書的PrivateKeyCertificate,都為[]byte格式,需要存儲的自行轉(zhuǎn)為string即可returncertificates,nil}//如果要進行續(xù)訂,可將certificates,err:=client.Certificate.Obtain(request)替換為certificates,err:=client.Certificate.Renew(request)// renew里面的參數(shù)就很簡單了,第一個參數(shù)就是第一次申請返回的指針的值certificates,第二個參數(shù)bundle上面已經(jīng)講過傳true即可,后面兩個參數(shù)一個傳false,一個傳空字符串""即可。開啟PAC自動配置然后剩下的內(nèi)容,就是使用和解析打印一下咯:
packagemainimport("crypto/tls""crypto/x509""fmt""log""server/get_certificate_from_lego")funcmain(){cs,err:=get_certificate_from_lego.GetCertificateFromLego()iferr!=nil{log.Fatalln("obtainscertificate:",err)}ca,err:=tls.X509KeyPair(cs.Certificate,cs.PrivateKey)iferr!=nil{log.Fatalln(err)}ifca.Leaf,err=x509.ParseCertificate(ca.Certificate[0]);err!=nil{log.Fatalln(err)}fmt.Println(ca.Leaf)}參考資料
lego:https://github.com/go-acme/lego
2022 GopherChina大會報名火熱進行中!
掃描下方二維碼即可報名參與
大會合作、現(xiàn)場招聘及企業(yè)購票等事宜請聯(lián)系微信:18516100522
相關(guān)閱讀
-
世界熱推薦:今晚7:00直播丨下一個突破...
今晚19:00,Cocos視頻號直播馬上點擊【預(yù)約】啦↓↓↓在運營了三年... -
NFT周刊|Magic Eden宣布支持Polygon網(wǎng)...
Block-986在NFT這樣的市場,每周都會有相當(dāng)多項目起起伏伏。在過去... -
環(huán)球今亮點!頭條觀察 | DeFi的興衰與...
在比特幣得到機構(gòu)關(guān)注之后,許多財務(wù)專家預(yù)測世界將因為加密貨幣的... -
重新審視合作,體育Crypto的可靠關(guān)系才能雙贏
Block-987即使在體育Crypto領(lǐng)域,人們的目光仍然集中在FTX上。隨著... -
簡訊:前端單元測試,更進一步
前端測試@2022如果從2014年Jest的第一個版本發(fā)布開始計算,前端開發(fā)... -
焦點熱訊:劉強東這波操作秀
近日,劉強東發(fā)布京東全員信,信中提到:自2023年1月1日起,逐步為...