90 lines
2.1 KiB
Go
90 lines
2.1 KiB
Go
package mitm
|
|
|
|
import (
|
|
"crypto/x509/pkix"
|
|
|
|
"github.com/hashicorp/hcl/v2"
|
|
)
|
|
|
|
const (
|
|
DefaultCommonName = "Styx Certificate Authority"
|
|
DefaultDays = 3
|
|
)
|
|
|
|
type Config struct {
|
|
CA *CAConfig `hcl:"ca,block"`
|
|
Key *KeyConfig `hcl:"key,block"`
|
|
Cache *CacheConfig `hcl:"cache,block"`
|
|
}
|
|
|
|
type CAConfig struct {
|
|
Cert string `hcl:"cert"`
|
|
Key string `hcl:"key,optional"`
|
|
Days int `hcl:"days,optional"`
|
|
KeyType string `hcl:"key_type,optional"`
|
|
Bits int `hcl:"bits,optional"`
|
|
Name string `hcl:"name,optional"`
|
|
Country string `hcl:"country,optional"`
|
|
Organization string `hcl:"organization,optional"`
|
|
Unit string `hcl:"unit,optional"`
|
|
Locality string `hcl:"locality,optional"`
|
|
Province string `hcl:"province,optional"`
|
|
Address []string `hcl:"address,optional"`
|
|
PostalCode string `hcl:"postal_code,optional"`
|
|
}
|
|
|
|
func (config CAConfig) DN() pkix.Name {
|
|
var name = pkix.Name{
|
|
CommonName: config.Name,
|
|
StreetAddress: config.Address,
|
|
}
|
|
if config.Name == "" {
|
|
name.CommonName = DefaultCommonName
|
|
}
|
|
if config.Country != "" {
|
|
name.Country = append(name.Country, config.Country)
|
|
}
|
|
if config.Organization != "" {
|
|
name.Organization = append(name.Organization, config.Organization)
|
|
}
|
|
if config.Unit != "" {
|
|
name.OrganizationalUnit = append(name.OrganizationalUnit, config.Unit)
|
|
}
|
|
if config.Locality != "" {
|
|
name.Locality = append(name.Locality, config.Locality)
|
|
}
|
|
if config.Province != "" {
|
|
name.Province = append(name.Province, config.Province)
|
|
}
|
|
if config.PostalCode != "" {
|
|
name.PostalCode = append(name.PostalCode, config.PostalCode)
|
|
}
|
|
return name
|
|
}
|
|
|
|
type KeyConfig struct {
|
|
Type string `hcl:"type,optional"`
|
|
Bits int `hcl:"bits,optional"`
|
|
Pool int `hcl:"pool,optional"`
|
|
}
|
|
|
|
var defaultKeyConfig = KeyConfig{
|
|
Type: "rsa",
|
|
Bits: 2048,
|
|
Pool: 5,
|
|
}
|
|
|
|
type CacheConfig struct {
|
|
Type string `hcl:"type"`
|
|
Body hcl.Body `hcl:",remain"`
|
|
}
|
|
|
|
type MemoryCacheConfig struct {
|
|
Size int `hcl:"size,optional"`
|
|
}
|
|
|
|
type DiskCacheConfig struct {
|
|
Path string `hcl:"path"`
|
|
Expire float64 `hcl:"expire,optional"`
|
|
}
|