package pki import ( "encoding/base64" "fmt" "html" "strings" "unicode" "github.com/google/uuid" ) // GenerateMobileconfig generates an iOS configuration profile containing // the root CA certificate for one-tap trust installation. func GenerateMobileconfig(rootDER []byte, rootCN string) []byte { b64Cert := base64.StdEncoding.EncodeToString(rootDER) profileUUID := uuid.New().String() certUUID := uuid.New().String() safeCN := html.EscapeString(rootCN) identifierCN := payloadIdentifierComponent(rootCN) profile := fmt.Sprintf(` PayloadContent PayloadCertificateFileName gordon-ca.crt PayloadContent %s PayloadDescription Installs the Gordon internal CA root certificate PayloadDisplayName %s PayloadIdentifier dev.gordon.ca.%s PayloadType com.apple.security.root PayloadUUID %s PayloadVersion 1 PayloadDescription Trust Gordon's internal Certificate Authority for HTTPS access PayloadDisplayName Gordon CA Trust PayloadIdentifier dev.gordon.ca-profile PayloadType Configuration PayloadUUID %s PayloadVersion 1 `, b64Cert, safeCN, identifierCN, certUUID, profileUUID) return []byte(profile) } func payloadIdentifierComponent(rootCN string) string { var b strings.Builder lastHyphen := false for _, r := range rootCN { r = unicode.ToLower(r) switch { case (r >= 'a' && r <= 'z') || (r >= '0' && r <= '9') || r == '.': b.WriteRune(r) lastHyphen = false case r == '-': if !lastHyphen { b.WriteRune(r) lastHyphen = true } default: if !lastHyphen { b.WriteRune('-') lastHyphen = true } } } identifier := strings.Trim(b.String(), "-.") if identifier == "" { return "gordon-ca" } return identifier }