最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

詳解如何使用go-acme/lego實現(xiàn)自動簽發(fā)證書

 更新時間:2024年03月10日 10:36:15   作者:AlpsMonaco  
這篇文章主要為大家詳細介紹了如何使用?go-acme/lego?的客戶端或庫完成證書的自動簽發(fā),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下

相關(guān)背景知識

Let's Encrypt

Let's Encrypt是一個于2015年三季度推出的數(shù)字證書認證機構(gòu),旨在以自動化流程消除手動創(chuàng)建和安裝證書的復雜流程,并推廣使萬維網(wǎng)服務器的加密連接無所不在,為安全網(wǎng)站提供免費的傳輸層安全性協(xié)議證書。

ACME

ACME,即自動自動證書管理環(huán)境(Automatic Certificate Management Environment),是一種協(xié)議,用于自動頒發(fā)和更新證書,無需人工干預。

互聯(lián)網(wǎng)安全研究小組 (ISRG) 最初為自己的證書服務設計了ACME協(xié)議。證書頒發(fā)機構(gòu)Let’s Encrypt通過ACME協(xié)議免費提供DV證書。如今,各種其他的CA、PKI供應商和瀏覽器都支持ACME協(xié)議,支持不同類型的證書。

go-acme/lego

一個用go語言寫的acme客戶端和go語言庫。下文簡稱為 lego。

使用 lego 客戶端

安裝

如果有g(shù)olang開發(fā)環(huán)境可以使用以下命令安裝lego

go install github.com/go-acme/lego/v4/cmd/lego@latest

如果沒有g(shù)olang開發(fā)環(huán)境可前往 github.com/go-acme/lego/releases 下載最新cli客戶端

簽發(fā)證書

簽發(fā)證書需要驗證域名的所有權(quán),acme協(xié)議提供了兩種方法來驗證你的域名所有權(quán),分別是http服務器驗證和dns驗證。

http服務器驗證

使用該方法驗證需要有一臺服務器,該服務器要有公網(wǎng)ip。同時還需要擁有服務器的root權(quán)限,才能監(jiān)聽80和443端口。

假設需要部署證書的域名為 example.com ,我們需要先配置 example.com 指向該服務器的公網(wǎng)ip,然后在服務器上執(zhí)行

lego --email="you@example.com" --domains="example.com" --http run

該命令啟動一個http服務器,監(jiān)聽80/443端口。

隨后Let's Encrypt會根據(jù)域名(example.com)訪問服務器的80/443端口,驗證域名的所有權(quán)。這個過程是自動化的,只需要等待即可。

驗證通過后會下發(fā)證書到 ./.lego/certificates 里,證書的有效期為3個月。

dns驗證

lego強大的地方便是集成了幾乎所有常用的云廠商,如CloudFlare、阿里云和騰訊云等的服務API。只需要設置API_KEY和API_SECRET便可以自動幫你完成DNS驗證。

這邊以騰訊云為例:

執(zhí)行以下命令:

TENCENTCLOUD_SECRET_ID=abcdefghijklmnopqrstuvwx \ 
TENCENTCLOUD_SECRET_KEY=your-secret-key \ 
lego --email you@example.com --dns tencentcloud --domains my.example.org run

該命令會調(diào)用騰訊云的后臺API,為example.com填寫DNS驗證信息;Let's Encrypt驗證通過之后,下發(fā)證書到./.lego/certificates,同時也會自動幫你刪除該DNS驗證信息。

使用lego庫

我們也可以使用lego庫來生成證書,或者做一些自動化證書生成然后部署的二次開發(fā)。lego庫同樣也支持http服務器驗證和dns驗證,下面給出完整可用代碼。

50-62行為騰訊云dns驗證部分,64-73為http服務器驗證部分,二選一即可。

package main

import (
	"crypto"
	"crypto/ecdsa"
	"crypto/elliptic"
	"crypto/rand"
	"fmt"
	"github.com/go-acme/lego/v4/certcrypto"
	"github.com/go-acme/lego/v4/certificate"
	"github.com/go-acme/lego/v4/lego"
	"github.com/go-acme/lego/v4/providers/dns/tencentcloud"
	"github.com/go-acme/lego/v4/registration"
	"log"
	"os"
)

type MyUser struct {
	Email        string
	Registration *registration.Resource
	key          crypto.PrivateKey
}

func (u *MyUser) GetEmail() string {
	return u.Email
}
func (u MyUser) GetRegistration() *registration.Resource {
	return u.Registration
}
func (u *MyUser) GetPrivateKey() crypto.PrivateKey {
	return u.key
}

func main() {
	privateKey, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
	if err != nil {
		log.Fatal(err)
	}
	myUser := MyUser{
		Email: "you@example.com",
		key:   privateKey,
	}
	config := lego.NewConfig(&myUser)
	config.Certificate.KeyType = certcrypto.RSA2048
	client, err := lego.NewClient(config)
	if err != nil {
		log.Fatal(err)
	}
        
   // 使用dns驗證的方式,這邊以騰訊云為例子。
	cfg := tencentcloud.NewDefaultConfig()
	cfg.SecretID = "abcdefghijklmnopqrstuvwx"
	cfg.SecretKey = "your-secret-key"
	p, err := tencentcloud.NewDNSProviderConfig(cfg)
	if err != nil {
		log.Fatal(err)
	}
	err = client.Challenge.SetDNS01Provider(p)
	if err != nil {
		log.Fatal(err)
	}
   // ---------使用dns-騰訊云驗證的方式結(jié)束-----------
   
   // 使用http服務器驗證的方式,注釋上面dns驗證的代碼部分,取消下面http驗證的代碼注釋部分
	// err = client.Challenge.SetHTTP01Provider(http01.NewProviderServer("", "80"))
	// if err != nil {
	// 	log.Fatal(err)
	// }
	// err = client.Challenge.SetTLSALPN01Provider(tlsalpn01.NewProviderServer("", "443"))
	// if err != nil {
	// 	log.Fatal(err)
	// }
   //-----------使用http服務器驗證的方式結(jié)束-----------
   
	reg, err := client.Registration.Register(registration.RegisterOptions{TermsOfServiceAgreed: true})
	if err != nil {
		log.Fatal(err)
	}
	myUser.Registration = reg
	request := certificate.ObtainRequest{
		Domains: []string{"sd.pigudaxiang.cn"},
		Bundle:  true,
	}
	certificates, err := client.Certificate.Obtain(request)
	if err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%#v\n", certificates)
	err = os.WriteFile("PrivateKey", certificates.PrivateKey, os.ModePerm)
	if err != nil {
		log.Print(err)
	}
	err = os.WriteFile("Certificate", certificates.Certificate, os.ModePerm)
	if err != nil {
		log.Print(err)
	}
	err = os.WriteFile("IssuerCertificate", certificates.IssuerCertificate, os.ModePerm)
	if err != nil {
		log.Print(err)
	}
	err = os.WriteFile("CSR", certificates.CSR, os.ModePerm)
	if err != nil {
		log.Print(err)
	}
}

到此這篇關(guān)于詳解如何使用go-acme/lego實現(xiàn)自動簽發(fā)證書的文章就介紹到這了,更多相關(guān)go自動簽發(fā)證書內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Golang中調(diào)用deepseekr1的教程詳解

    Golang中調(diào)用deepseekr1的教程詳解

    這篇文章主要為大家詳細介紹了Golang中調(diào)用deepseekr1的相關(guān)教程,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2025-02-02
  • 詳解如何使用go-acme/lego實現(xiàn)自動簽發(fā)證書

    詳解如何使用go-acme/lego實現(xiàn)自動簽發(fā)證書

    這篇文章主要為大家詳細介紹了如何使用?go-acme/lego?的客戶端或庫完成證書的自動簽發(fā),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-03-03
  • 從源碼深入理解golang?RWMutex讀寫鎖操作

    從源碼深入理解golang?RWMutex讀寫鎖操作

    這篇文章主要介紹了從源碼深入理解golang?RWMutex讀寫鎖操作,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-05-05
  • GoLang中生成UUID唯一標識的實現(xiàn)方法

    GoLang中生成UUID唯一標識的實現(xiàn)方法

    UUID是讓分散式系統(tǒng)中的所有元素,都能有唯一的辨識信息,本文主要介紹了GoLang中生成UUID唯一標識的實現(xiàn)方法,具有一定的參考價值,感興趣的可以了解一下
    2024-08-08
  • go嵌套匿名結(jié)構(gòu)體的初始化詳解

    go嵌套匿名結(jié)構(gòu)體的初始化詳解

    這篇文章主要介紹了go嵌套匿名結(jié)構(gòu)體的初始化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-12-12
  • go語言base64用法實例

    go語言base64用法實例

    這篇文章主要介紹了go語言base64用法,實例分析了Go語言base64編碼的實用技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • Golang泛型與類型約束的用法詳解

    Golang泛型與類型約束的用法詳解

    這篇文章主要介紹了Golang泛型與類型約束的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-04-04
  • golang redis中Pipeline通道的使用詳解

    golang redis中Pipeline通道的使用詳解

    本文主要介紹了golang redis中Pipeline通道的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-06-06
  • golang sudog指的是什么

    golang sudog指的是什么

    sudog代表在等待隊列中的goroutine,比如channel發(fā)送接受,由于goroutine和同步對象的關(guān)系是多對多,因此需要sudog映射,本文重點介紹golang sudog指的是什么,感興趣的朋友一起看看吧
    2024-02-02
  • 詳解Golang Iris框架的基本使用

    詳解Golang Iris框架的基本使用

    這篇文章主要介紹了Golang Iris框架的基本使用,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-11-11

最新評論

五大连池市| 鱼台县| 玛多县| 台北市| 房山区| 广东省| 迁安市| 太谷县| 水城县| 鄂伦春自治旗| 益阳市| 离岛区| 神池县| 威海市| 景洪市| 藁城市| 调兵山市| 芦溪县| 马关县| 和静县| 民勤县| 大理市| 柳河县| 隆林| 白河县| 屯门区| 当雄县| 胶南市| 汝阳县| 奎屯市| 汝州市| 西和县| 双峰县| 榆树市| 姚安县| 南平市| 东兰县| 元江| 松滋市| 治多县| 金湖县|