Skip to content

Commit 9efc9d1

Browse files
committed
wip(examples): debug cert example
1 parent 585b788 commit 9efc9d1

File tree

1 file changed

+58
-6
lines changed

1 file changed

+58
-6
lines changed

examples/entraid/clientcert/main.go

Lines changed: 58 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@ package main
22

33
import (
44
"context"
5+
"crypto/rsa"
56
"crypto/x509"
7+
"encoding/base64"
68
"encoding/pem"
79
"fmt"
810
"log"
@@ -21,7 +23,7 @@ func main() {
2123
// Load configuration
2224
cfg, err := config.LoadConfig(os.Getenv("REDIS_ENDPOINTS_CONFIG_PATH"))
2325
if err != nil {
24-
log.Fatalf("Failed to load config: %v", err)
26+
log.Printf("Failed to load config: %v", err)
2527
}
2628

2729
// Create a confidential identity credentials provider with certificate authentication
@@ -36,11 +38,11 @@ func main() {
3638
},
3739
Scopes: cfg.GetRedisScopes(),
3840
ClientCert: parseCertificates(cfg.AzureCert),
39-
ClientPrivateKey: []byte(cfg.AzurePrivateKey),
41+
ClientPrivateKey: parsePrivateKey(cfg.AzurePrivateKey),
4042
},
4143
})
4244
if err != nil {
43-
log.Fatalf("Failed to create credentials provider: %v", err)
45+
log.Printf("Failed to create credentials provider: %v", err)
4446
}
4547

4648
// Create Redis client with streaming credentials provider
@@ -102,21 +104,71 @@ func main() {
102104
fmt.Printf("Retrieved value from cluster: %s\n", clusterVal)
103105
}
104106

107+
func decodeBase64Pem(pemData string) string {
108+
decoded, err := base64.StdEncoding.DecodeString(pemData)
109+
if err != nil {
110+
log.Fatalf("Failed to decode base64: %v", err)
111+
}
112+
return string(decoded)
113+
}
114+
115+
func parsePrivateKey(base64data string) *rsa.PrivateKey {
116+
var privateKey *rsa.PrivateKey
117+
var err error
118+
pk, err := x509.ParsePKCS8PrivateKey([]byte(base64data))
119+
if err != nil {
120+
log.Printf("Failed to parse pkcs8 key: %v", err)
121+
} else {
122+
privateKey, _ = pk.(*rsa.PrivateKey)
123+
return privateKey
124+
}
125+
pk, err = x509.ParsePKCS1PrivateKey([]byte(base64data))
126+
if err != nil {
127+
log.Printf("Failed to parse pkcs1 key: %v", err)
128+
}
129+
privateKey, _ = pk.(*rsa.PrivateKey)
130+
if privateKey == nil {
131+
decoded := decodeBase64Pem(base64data)
132+
pk, err = x509.ParsePKCS8PrivateKey([]byte(decoded))
133+
if err != nil {
134+
log.Printf("Failed to parse pkcs8 key: %v", err)
135+
}
136+
privateKey, _ = pk.(*rsa.PrivateKey)
137+
if privateKey == nil {
138+
pk, err = x509.ParsePKCS1PrivateKey([]byte(decoded))
139+
if err != nil {
140+
log.Printf("Failed to parse pkcs1 key: %v", err)
141+
}
142+
privateKey, _ = pk.(*rsa.PrivateKey)
143+
}
144+
}
145+
return privateKey
146+
}
147+
105148
func parseCertificates(pemData string) []*x509.Certificate {
106149
var certs []*x509.Certificate
150+
decoded := decodeBase64Pem(pemData)
107151
for {
108-
block, rest := pem.Decode([]byte(pemData))
152+
block, rest := pem.Decode([]byte(decoded))
109153
if block == nil {
110154
break
111155
}
112156
if block.Type == "CERTIFICATE" {
113157
cert, err := x509.ParseCertificate(block.Bytes)
114158
if err != nil {
115-
log.Fatalf("Failed to parse certificate: %v", err)
159+
log.Printf("Failed to parse certificate: %v", err)
116160
}
117161
certs = append(certs, cert)
118162
}
119-
pemData = string(rest)
163+
decoded = string(rest)
164+
}
165+
if len(certs) == 0 {
166+
decoded := decodeBase64Pem(pemData)
167+
cert, err := x509.ParseCertificate([]byte(decoded))
168+
if err != nil {
169+
log.Printf("Failed to parse certificate: %v", err)
170+
}
171+
certs = append(certs, cert)
120172
}
121173
return certs
122174
}

0 commit comments

Comments
 (0)