34 lines
722 B
Go
34 lines
722 B
Go
|
package acme
|
||
|
|
||
|
import (
|
||
|
"crypto/rand"
|
||
|
"crypto/rsa"
|
||
|
"crypto/x509"
|
||
|
"crypto/x509/pkix"
|
||
|
"encoding/pem"
|
||
|
)
|
||
|
|
||
|
func generatePrivateKey(keyLength int) (*rsa.PrivateKey, error) {
|
||
|
return rsa.GenerateKey(rand.Reader, keyLength)
|
||
|
}
|
||
|
|
||
|
func generateCsr(privateKey *rsa.PrivateKey, domain string) ([]byte, error) {
|
||
|
template := x509.CertificateRequest{
|
||
|
Subject: pkix.Name{
|
||
|
CommonName: domain,
|
||
|
},
|
||
|
}
|
||
|
|
||
|
return x509.CreateCertificateRequest(rand.Reader, &template, privateKey)
|
||
|
}
|
||
|
|
||
|
func pemEncode(data interface{}) []byte {
|
||
|
var pemBlock *pem.Block
|
||
|
switch key := data.(type) {
|
||
|
case *rsa.PrivateKey:
|
||
|
pemBlock = &pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)}
|
||
|
}
|
||
|
|
||
|
return pem.EncodeToMemory(pemBlock)
|
||
|
}
|