I’m using golang to generate CSR
Source code:
package main
import (
"encoding/base64"
"fmt"
"log"
"os"
"os/exec"
)
func generateCSR() {
// Create a temporary OpenSSL config file with SANs
configFile := "openssl.cnf"
opensslConfigContent := `
[ req ]
default_bits = 2048
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
req_extensions = v3_req
prompt = no # Disable interactive prompt
[ req_distinguished_name ]
C = SA
O = Maximum Speed Tech Supply LTD
OU = Riyadh Branch
CN = TST-886431145-399999999900003
emailAddress = admin@example.com
[ v3_req ]
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = DirName:/SN=1-TST|2-TST|3-ed22f1d8-e6a2-1118-9b58-d9a8f11e445f/UID=399999999900003/title=1100/registeredAddress=RRRD2929/businessCategory=Supply activities
`
// Write the config to a file
err := os.WriteFile(configFile, []byte(opensslConfigContent), 0644)
if err != nil {
log.Fatalf("Failed to write OpenSSL config: %v", err)
}
defer os.Remove(configFile) // Clean up the config file afterward
// OpenSSL command to generate a CSR with SANs
cmd := exec.Command("openssl", "req", "-new", "-newkey", "rsa:2048", "-keyout", "private.key", "-out", "csr.pem", "-config", configFile, "-nodes")
// Capture stderr and stdout to print out any error messages from OpenSSL
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
// Run the command
err = cmd.Run()
if err != nil {
log.Fatalf("Failed to run OpenSSL command: %v", err)
}
// Print the generated CSR to console
csrFile, err := os.ReadFile("csr.pem")
if err != nil {
log.Fatalf("Failed to read CSR file: %v", err)
}
fmt.Println("Generated CSR:")
fmt.Println(string(csrFile))
// Encode the CSR string to Base64
base64CSR := base64.StdEncoding.EncodeToString(csrFile)
fmt.Println("Base64 Encoded CSR:")
fmt.Println(base64CSR)
}
func main() {
generateCSR()
}
the above generate the csr:
-----BEGIN CERTIFICATE REQUEST-----
MIIDnjCCAoYCAQAwgZcxCzAJBgNVBAYTAlNBMSYwJAYDVQQKDB1NYXhpbXVtIFNw
ZWVkIFRlY2ggU3VwcGx5IExURDEWMBQGA1UECwwNUml5YWRoIEJyYW5jaDEmMCQG
A1UEAwwdVFNULTg4NjQzMTE0NS0zOTk5OTk5OTk5MDAwMDMxIDAeBgkqhkiG9w0B
CQEWEWFkbWluQGV4YW1wbGUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
CgKCAQEAy3iAVEfge0rH0p8d6XxnKoBQXZVMd5QCtPbqBvr8lRFEWv0dPohLvZlM
vrENrNxcr8QtwBDRptEk0ifRDLaQSCVezk7zOtN3cogecpU+oAwxUHZKiz5DY1K8
Y1F0RXTvPeifYi/GQcEh21ZEDWoE3vVXmj359onlyRS4/ZaiGTr3HaPZ+YM4EDqP
z8g6rwmjIh1khBPvCMBEkYDuwCt4ed2aqTQuBFkkWi0c+VSDAfLoWBhiDxa7UFlJ
lxk9rn/2EY9J5NOMKkx0d1FldJ8h9uJ9aHyZDC6ypGMzYhTxCDXnZBlhDPbHA5JY
ggWIsHYYgkQdJrYK5g0SMDB6Q3KsbQIDAQABoIHAMIG9BgkqhkiG9w0BCQ4xga8w
gawwgakGA1UdEQSBoTCBnoKBm0Rpck5hbWU6L1NOPTEtVFNUfDItVFNUfDMtZWQy
MmYxZDgtZTZhMi0xMTE4LTliNTgtZDlhOGYxMWU0NDVmL1VJRD0zOTk5OTk5OTk5
MDAwMDMvdGl0bGU9MTEwMC9yZWdpc3RlcmVkQWRkcmVzcz1SUlJEMjkyOS9idXNp
bmVzc0NhdGVnb3J5PVN1cHBseSBhY3Rpdml0aWVzMA0GCSqGSIb3DQEBCwUAA4IB
AQA21QVzbQIjVd6MyLWSAJt1fsuz2BIziGocGR/XA8uqtfzViL53GRZdZxt8iScn
gPr8fX2KKASJhOiToHtrilUMSPuumwspFLQqj6GtWFrknlY7PFtyM/l2TGfjf0VJ
LTjKBBuZnUWzYMMUwC5stCyW7MI2YhkXLk10+LxYhRCy1IqrOiXW7omonxrbz+z5
9h6BeHmboYgbWN9sWbZCKwQ1VFXuXukE4OTgbVtInGuJT13lsizG0mvsSrYebOEp
rRIQwKvRiqEd8BCaR3VL7X9yzV4o3DcKUTOue+vZLAz4dumY6Om7bvGhbGiFjm40
VmfRj8PPp6koIqInsWsZgqKG
-----END CERTIFICATE REQUEST-----
i did base64 encoding of the above obtained csr and send it to POST /compliance
api
but it always giving me 400 Invalid Request. No idea what is the issue.