56 lines
1.5 KiB
Go
56 lines
1.5 KiB
Go
package main
|
|
|
|
import (
|
|
"os"
|
|
"os/exec"
|
|
"path/filepath"
|
|
"testing"
|
|
)
|
|
|
|
func TestOpenSSLSubjectNameEscapesSlashAndBackslash(t *testing.T) {
|
|
got, err := openssl_subject_name(`Example/User\Name`)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
want := `/CN=Example\/User\\Name`
|
|
if got != want {
|
|
t.Fatalf("subject = %q; want %q", got, want)
|
|
}
|
|
}
|
|
|
|
func TestOpenSSLSubjectNameRejectsLineBreak(t *testing.T) {
|
|
if _, err := openssl_subject_name("Example\nUser"); err == nil {
|
|
t.Fatal("certificate subject accepted a line break")
|
|
}
|
|
}
|
|
|
|
func TestValidateCertificatePairAcceptsMatchingPEM(t *testing.T) {
|
|
openssl, err := exec.LookPath("openssl")
|
|
if err != nil {
|
|
t.Skip("openssl is not installed")
|
|
}
|
|
directory := t.TempDir()
|
|
keyPath := filepath.Join(directory, "key.pem")
|
|
certificatePath := filepath.Join(directory, "certificate.pem")
|
|
combinedPath := filepath.Join(directory, "combined.pem")
|
|
command := exec.Command(openssl, "req", "-x509", "-newkey", "rsa:2048", "-keyout", keyPath, "-out", certificatePath, "-days", "1", "-nodes", "-subj", "/CN=Test")
|
|
if output, err := command.CombinedOutput(); err != nil {
|
|
t.Fatalf("generate test certificate: %v: %s", err, output)
|
|
}
|
|
key, err := os.ReadFile(keyPath)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
certificate, err := os.ReadFile(certificatePath)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
combined := append(append(append([]byte(nil), key...), '\n'), certificate...)
|
|
if err := os.WriteFile(combinedPath, combined, 0600); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
if err := validate_certificate_pair(openssl, combinedPath); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
}
|