cert

package
v1.0.5 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Feb 11, 2025 License: MIT, MIT Imports: 17 Imported by: 0

README

Cert 软件授权管理解决方案包

cert 包提供了一个完整的证书管理解决方案,专门用于软件授权管理。它支持证书的签发、验证、吊销以及版本控制等功能。

主要特性

证书管理
  • CA 证书生成和管理
  • 客户端证书签发
  • 证书验证和吊销
  • 支持自定义 CA
安全特性
  • 机器码绑定
  • 防调试保护
  • 时间篡改检测
  • 版本控制
授权管理
  • 证书吊销列表
  • 版本强制更新
  • 有效期管理
  • 客户信息管理

安装

go get github.com/darkit/machineid/cert

快速开始

1. 创建授权管理器
import "github.com/darkit/machineid/cert"

// 使用默认配置
auth, err := cert.New()

// 或使用自定义 CA
auth, err := cert.New(
    cert.WithCA(customCACert, customCAKey),
    cert.WithVersion("1.0.0"),
)
2. 生成新的 CA 证书
caInfo := cert.CAInfo{
    CommonName:   "My Software CA",
    Organization: "My Company",
    Country:      "CN",
    Province:     "Guangdong",
    Locality:     "Shenzhen",
    ValidDays:    3650,  // 10年有效期
    KeySize:      4096,
}

err := auth.GenerateCA(caInfo)
3. 签发客户端证书
clientInfo := cert.ClientInfo{
    MachineID:     machineID,
    ExpiryDate:    time.Now().AddDate(1, 0, 0),  // 一年有效期
    CompanyName:   "客户公司",
    Department:    "技术部",
    ContactPerson: "张三",
    ContactPhone:  "13800138000",
    ContactEmail:  "zhangsan@example.com",
    Version:       "1.0.0",
    MaxValidDays:  365,
}

certificate, err := auth.IssueClientCert(clientInfo)
4. 验证证书
// 验证证书
err := auth.ValidateCert(certPEM, machineID)
5. 证书吊销管理
// 设置吊销列表
auth, err := cert.New(
    cert.WithRevokeList([]byte(`{
        "updateTime": "2024-02-14T12:00:00Z",
        "minVersion": "1.0.0",
        "revokedCerts": {
            "123456": {
                "serialNumber": "123456",
                "revokeDate": "2024-02-14T12:00:00Z",
                "revokeReason": "security issue"
            }
        }
    }`)),
)

// 或设置动态更新函数
auth, err := cert.New(
    cert.WithRevokeListUpdater(func() ([]byte, error) {
        // 从远程服务器获取最新的吊销列表
        return http.Get("https://example.com/revoke-list")
    }),
)

CA 证书和私钥说明

CA(Certificate Authority)由两个重要部分组成:

  1. CA 证书(ca.crt):公开部分,用于验证由该 CA 签发的证书
  2. CA 私钥(ca.key):私密部分,用于签发新的证书
CA 私钥的重要性

CA 私钥(ca.key)是整个证书系统的核心,必须严格保护:

  • 它用于签发所有客户端证书
  • 如果泄露,攻击者可以签发任意伪造的证书
  • 一旦泄露,所有已签发的证书都需要重新签发

平台支持

  • Windows
  • Linux
  • macOS

版本控制

支持通过证书强制客户端版本更新:

  • 可设置最低支持版本
  • 支持按证书控制版本
  • 支持全局版本策略

注意事项

  1. 证书管理

    • 妥善保管 CA 私钥
    • 定期更新证书
    • 实施证书备份策略
  2. 版本管理

    • 合理设置版本号
    • 谨慎使用强制更新
    • 做好版本兼容性测试
  3. 性能考虑

    • 证书验证缓存
    • 吊销列表更新策略
    • 并发处理优化

许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。

贡献

欢迎提交 Issue 和 Pull Request!

Documentation

Overview

Package cert 提供证书管理功能,包括证书的签发、验证和吊销管理。

这个包主要用于软件授权管理,支持: - 证书签发和验证 - 证书吊销管理 - 版本控制 - 授权时间管理

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Authorizer

type Authorizer struct {
	// contains filtered or unexported fields
}

Authorizer 授权管理器

func New

func New(opts ...Option) (*Authorizer, error)

New 创建新的授权管理器

func (*Authorizer) GenerateCA

func (a *Authorizer) GenerateCA(info CAInfo) error

GenerateCA 生成新的CA证书和私钥,并更新授权管理器

func (*Authorizer) GetCACertPEM

func (a *Authorizer) GetCACertPEM() []byte

GetCACertPEM 获取PEM格式的CA证书

func (*Authorizer) IssueClientCert

func (a *Authorizer) IssueClientCert(info ClientInfo) (*Certificate, error)

IssueClientCert 签发客户端证书

func (*Authorizer) SaveCA

func (a *Authorizer) SaveCA(dirPath ...string) error

SaveCA 保存CA证书到指定目录,如果不指定目录则使用当前工作目录

func (*Authorizer) SaveClientCert

func (a *Authorizer) SaveClientCert(cert *Certificate, dirPath ...string) error

SaveClientCert 保存客户端证书到指定目录,如果不指定目录则使用当前工作目录 证书文件格式:{机器码}-{生效时间}-{结束时间}.crt

func (*Authorizer) SetCurrentCertVersion added in v1.0.4

func (a *Authorizer) SetCurrentCertVersion(version string)

SetCurrentCertVersion 设置当前证书格式版本

func (*Authorizer) ValidateCert

func (a *Authorizer) ValidateCert(certPEM []byte, machineID string) error

ValidateCert 验证客户端证书

type CAInfo

type CAInfo struct {
	// 基本信息
	CommonName string // CA名称,如 "My Software Root CA"
	ValidDays  int    // 有效期天数

	// 组织信息
	Organization string // 组织名称,如公司名称
	Country      string // 国家代码,如 "CN"
	Province     string // 省份
	Locality     string // 城市

	// 证书参数
	KeySize   int      // RSA密钥大小,默认4096
	KeyUsages []string // 密钥用途,可选
}

CAInfo CA证书的配置信息

type Certificate

type Certificate struct {
	CertPEM   []byte    // PEM格式的证书
	KeyPEM    []byte    // PEM格式的私钥
	MachineID string    // 机器ID
	NotBefore time.Time // 生效时间
	NotAfter  time.Time // 过期时间
}

Certificate 证书信息

type ClientInfo

type ClientInfo struct {
	// 基本信息
	MachineID  string    // 机器码可以是单个或多个(用逗号分隔)
	ExpiryDate time.Time // 授权结束日期

	// 公司信息
	CompanyName   string // 公司名称
	Department    string // 部门名称
	ContactPerson string // 联系人
	ContactPhone  string // 联系电话
	ContactEmail  string // 联系邮箱

	// 地址信息
	Country  string // 国家
	Province string // 省份
	City     string // 城市
	Address  string // 详细地址

	// 版本信息
	Version            string // 当前程序版本
	ValidityPeriodDays int    // 证书有效天数
}

ClientInfo 客户端信息

type Option

type Option func(*Authorizer) error

Option 配置选项函数类型

func WithCA

func WithCA(cert, key []byte) Option

WithCA 设置自定义的CA证书和私钥

func WithEnterpriseID added in v1.0.4

func WithEnterpriseID(id int) Option

WithEnterpriseID 设置企业标识符

func WithVersion

func WithVersion(version string) Option

WithVersion 设置程序版本的选项

type RevokeInfo

type RevokeInfo struct {
	SerialNumber    string    // 证书序列号
	RevokeDate      time.Time // 吊销时间
	RevokeReason    string    // 吊销原因
	MinValidVersion string    // 最低有效版本
}

RevokeInfo 吊销信息

type RevokeList

type RevokeList struct {
	UpdateTime   time.Time              // 列表更新时间
	RevokedCerts map[string]*RevokeInfo // 已吊销证书
	MinVersion   string                 // 最低支持版本
}

RevokeList 吊销列表

type RevokeManager

type RevokeManager struct {
	// contains filtered or unexported fields
}

RevokeManager 吊销管理器

func NewRevokeManager

func NewRevokeManager(version string, opts ...RevokeOption) (*RevokeManager, error)

NewRevokeManager 创建吊销管理器

func (*RevokeManager) IsRevoked

func (rm *RevokeManager) IsRevoked(serialNumber string) (bool, string)

IsRevoked 检查证书是否被吊销

func (*RevokeManager) UpdateRevokeList

func (rm *RevokeManager) UpdateRevokeList() error

UpdateRevokeList 更新吊销列表

type RevokeOption

type RevokeOption func(*RevokeManager) error

RevokeOption 吊销管理器的配置选项

func WithRevokeList

func WithRevokeList(list []byte) RevokeOption

WithRevokeList 直接设置吊销列表

func WithRevokeListUpdater

func WithRevokeListUpdater(updater func() ([]byte, error)) RevokeOption

WithRevokeListUpdater 设置吊销列表更新函数

type VersionInfo

type VersionInfo struct {
	MinRequiredVersion string // 最低需要的客户端版本
	CertVersion        string // 证书格式版本
	MaxValidDays       int    // 最大有效天数
}

VersionInfo 定义证书的版本信息

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL