国产精品夜色视频一级区_hh99m福利毛片_国产一区二区成人久久免费影院_伊人久久大香线蕉综合影院75_国产精品久久果冻传媒

您的位置:首頁 >聚焦 >

免費!讓Https證書不再成為煩惱|世界播資訊

2022-11-22 09:29:35    來源:程序員客棧
前言

書承上回,上期寫了《實戰(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

戳這里 Go !

關(guān)鍵詞: 參考資料 進行修改 這個客戶端

相關(guān)閱讀