Skip to content

Commit 6568ff4

Browse files
pfxtool: Improve subject parsing
1 parent 3d8aaf6 commit 6568ff4

1 file changed

Lines changed: 42 additions & 2 deletions

File tree

cmd/pfxtool/main.go

Lines changed: 42 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import (
1616
mathrand "math/rand"
1717
"os"
1818
"path/filepath"
19+
"slices"
1920
"strings"
2021
"time"
2122

@@ -472,8 +473,8 @@ func inspect(pfxFile string, pfxPassword string, verbose bool) error {
472473

473474
fmt.Println("Certificate:")
474475

475-
if cert.Subject.CommonName != "" {
476-
fmt.Printf(" Subject : %s\n", cert.Subject.String())
476+
if len(cert.Subject.Names) > 0 {
477+
fmt.Printf(" Subject : %s\n", nameAsString(cert.Subject))
477478
}
478479

479480
if len(otherNames) > 0 {
@@ -885,6 +886,45 @@ func tryParseASN1GUID(asn1Data []byte) string {
885886
rawGUID[10:])
886887
}
887888

889+
func nameAsString(pkixName pkix.Name) string {
890+
parts := make([]string, 0, len(pkixName.Names))
891+
892+
for _, name := range pkixName.Names {
893+
var key string
894+
895+
switch name.Type.String() {
896+
case "2.5.4.6":
897+
key = "C"
898+
case "2.5.4.10":
899+
key = "O"
900+
case "2.5.4.11":
901+
key = "OU"
902+
case "2.5.4.3":
903+
key = "CN"
904+
case "2.5.4.5":
905+
key = "SERIALNUMBER"
906+
case "2.5.4.7":
907+
key = "L"
908+
case "2.5.4.8":
909+
key = "ST"
910+
case "2.5.4.9":
911+
key = "STREET"
912+
case "2.5.4.17":
913+
key = "POSTALCODE"
914+
case "0.9.2342.19200300.100.1.25":
915+
key = "DC"
916+
default:
917+
key = "{" + name.Type.String() + "}"
918+
}
919+
920+
parts = append(parts, fmt.Sprintf("%s=%v", key, name.Value))
921+
}
922+
923+
slices.Reverse(parts)
924+
925+
return strings.Join(parts, ",")
926+
}
927+
888928
func joinStringers[T fmt.Stringer](elems []T, sep string) string {
889929
strs := make([]string, 0, len(elems))
890930

0 commit comments

Comments
 (0)