Skip to content

Commit f17bfdf

Browse files
committedMay 8, 2023
Reformat the SSH certificate logging output for read- and parsability
1 parent 4c56877 commit f17bfdf

File tree

2 files changed

+19
-8
lines changed

2 files changed

+19
-8
lines changed
 

‎api/api.go

+16-5
Original file line numberDiff line numberDiff line change
@@ -508,21 +508,32 @@ func LogCertificate(w http.ResponseWriter, cert *x509.Certificate) {
508508
func LogSSHCertificate(w http.ResponseWriter, cert *ssh.Certificate) {
509509
if rl, ok := w.(logging.ResponseLogger); ok {
510510
mak := bytes.TrimSpace(ssh.MarshalAuthorizedKey(cert))
511-
certType := "user"
511+
var certificate string
512+
parts := strings.Split(string(mak), " ")
513+
if len(parts) > 1 {
514+
certificate = parts[1]
515+
}
516+
var userOrHost string
512517
if cert.CertType == ssh.HostCert {
513-
certType = "host"
518+
userOrHost = "host"
519+
} else {
520+
userOrHost = "user"
514521
}
522+
certificateType := fmt.Sprintf("%s %s certificate", parts[0], userOrHost) // e.g. ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate
515523
m := map[string]interface{}{
516524
"serial": cert.Serial,
517525
"principals": cert.ValidPrincipals,
518526
"valid-from": time.Unix(int64(cert.ValidAfter), 0).Format(time.RFC3339),
519527
"valid-to": time.Unix(int64(cert.ValidBefore), 0).Format(time.RFC3339),
520-
"certificate": string(mak),
521-
"certificate-type": certType,
528+
"certificate": certificate,
529+
"certificate-type": certificateType,
522530
}
523531
fingerprint, err := sshutil.FormatFingerprint(mak, sshutil.DefaultFingerprint)
524532
if err == nil {
525-
m["public-key"] = fingerprint
533+
fpParts := strings.Split(fingerprint, " ")
534+
if len(fpParts) > 3 {
535+
m["public-key"] = fmt.Sprintf("%s %s", fpParts[1], fpParts[len(fpParts)-1])
536+
}
526537
}
527538
rl.WithFields(m)
528539
}

‎api/api_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -1680,9 +1680,9 @@ func TestLogSSHCertificate(t *testing.T) {
16801680
fields := rl.Fields()
16811681
sassert.Equal(t, uint64(14376510277651266987), fields["serial"])
16821682
sassert.Equal(t, []string{"herman"}, fields["principals"])
1683-
sassert.Equal(t, "user", fields["certificate-type"])
1683+
sassert.Equal(t, "ecdsa-sha2-nistp256-cert-v01@openssh.com user certificate", fields["certificate-type"])
16841684
sassert.Equal(t, time.Unix(1674129191, 0).Format(time.RFC3339), fields["valid-from"])
16851685
sassert.Equal(t, time.Unix(1674186851, 0).Format(time.RFC3339), fields["valid-to"])
1686-
sassert.Equal(t, "ecdsa-sha2-nistp256-cert-v01@openssh.com AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgLnkvSk4odlo3b1R+RDw+LmorL3RkN354IilCIVFVen4AAAAIbmlzdHAyNTYAAABBBHjKHss8WM2ffMYlavisoLXR0I6UEIU+cidV1ogEH1U6+/SYaFPrlzQo0tGLM5CNkMbhInbyasQsrHzn8F1Rt7nHg5/tcSf9qwAAAAEAAAAGaGVybWFuAAAACgAAAAZoZXJtYW4AAAAAY8kvJwAAAABjyhBjAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAGgAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAAhuaXN0cDI1NgAAAEEE/ayqpPrZZF5uA1UlDt4FreTf15agztQIzpxnWq/XoxAHzagRSkFGkdgFpjgsfiRpP8URHH3BZScqc0ZDCTxhoQAAAGQAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAEkAAAAhAJuP1wCVwoyrKrEtHGfFXrVbRHySDjvXtS1tVTdHyqymAAAAIBa/CSSzfZb4D2NLP+eEmOOMJwSjYOiNM8fiOoAaqglI", fields["certificate"])
1687-
sassert.Equal(t, "256 SHA256:RvkDPGwl/G9d7LUFm1kmWhvOD9I/moPq4yxcb0STwr0 no comment (ECDSA-CERT)", fields["public-key"])
1686+
sassert.Equal(t, "AAAAKGVjZHNhLXNoYTItbmlzdHAyNTYtY2VydC12MDFAb3BlbnNzaC5jb20AAAAgLnkvSk4odlo3b1R+RDw+LmorL3RkN354IilCIVFVen4AAAAIbmlzdHAyNTYAAABBBHjKHss8WM2ffMYlavisoLXR0I6UEIU+cidV1ogEH1U6+/SYaFPrlzQo0tGLM5CNkMbhInbyasQsrHzn8F1Rt7nHg5/tcSf9qwAAAAEAAAAGaGVybWFuAAAACgAAAAZoZXJtYW4AAAAAY8kvJwAAAABjyhBjAAAAAAAAAIIAAAAVcGVybWl0LVgxMS1mb3J3YXJkaW5nAAAAAAAAABdwZXJtaXQtYWdlbnQtZm9yd2FyZGluZwAAAAAAAAAWcGVybWl0LXBvcnQtZm9yd2FyZGluZwAAAAAAAAAKcGVybWl0LXB0eQAAAAAAAAAOcGVybWl0LXVzZXItcmMAAAAAAAAAAAAAAGgAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAAhuaXN0cDI1NgAAAEEE/ayqpPrZZF5uA1UlDt4FreTf15agztQIzpxnWq/XoxAHzagRSkFGkdgFpjgsfiRpP8URHH3BZScqc0ZDCTxhoQAAAGQAAAATZWNkc2Etc2hhMi1uaXN0cDI1NgAAAEkAAAAhAJuP1wCVwoyrKrEtHGfFXrVbRHySDjvXtS1tVTdHyqymAAAAIBa/CSSzfZb4D2NLP+eEmOOMJwSjYOiNM8fiOoAaqglI", fields["certificate"])
1687+
sassert.Equal(t, "SHA256:RvkDPGwl/G9d7LUFm1kmWhvOD9I/moPq4yxcb0STwr0 (ECDSA-CERT)", fields["public-key"])
16881688
}

0 commit comments

Comments
 (0)
Please sign in to comment.