@@ -2,7 +2,9 @@ package main
2
2
3
3
import (
4
4
"context"
5
+ "crypto/rsa"
5
6
"crypto/x509"
7
+ "encoding/base64"
6
8
"encoding/pem"
7
9
"fmt"
8
10
"log"
@@ -23,6 +25,8 @@ func main() {
23
25
if err != nil {
24
26
log .Fatalf ("Failed to load config: %v" , err )
25
27
}
28
+ fmt .Println (cfg )
29
+ fmt .Println (cfg .AzureCert )
26
30
27
31
// Create a confidential identity credentials provider with certificate authentication
28
32
cp , err := entraid .NewConfidentialCredentialsProvider (entraid.ConfidentialCredentialsProviderOptions {
@@ -36,7 +40,7 @@ func main() {
36
40
},
37
41
Scopes : cfg .GetRedisScopes (),
38
42
ClientCert : parseCertificates (cfg .AzureCert ),
39
- ClientPrivateKey : [] byte (cfg .AzurePrivateKey ),
43
+ ClientPrivateKey : parsePrivateKey (cfg .AzurePrivateKey ),
40
44
},
41
45
})
42
46
if err != nil {
@@ -102,10 +106,37 @@ func main() {
102
106
fmt .Printf ("Retrieved value from cluster: %s\n " , clusterVal )
103
107
}
104
108
109
+ func decodeBase64Pem (pemData string ) string {
110
+ decoded , err := base64 .StdEncoding .DecodeString (pemData )
111
+ if err != nil {
112
+ log .Fatalf ("Failed to decode base64: %v" , err )
113
+ }
114
+ return string (decoded )
115
+ }
116
+
117
+ func parsePrivateKey (base64data string ) * rsa.PrivateKey {
118
+ var privateKey * rsa.PrivateKey
119
+ var err error
120
+ pk , err := x509 .ParsePKCS8PrivateKey ([]byte (base64data ))
121
+ if err != nil {
122
+ log .Printf ("Failed to parse pkcs8 key: %v" , err )
123
+ } else {
124
+ privateKey , _ = pk .(* rsa.PrivateKey )
125
+ return privateKey
126
+ }
127
+ pk , err = x509 .ParsePKCS1PrivateKey ([]byte (base64data ))
128
+ if err != nil {
129
+ log .Fatalf ("Failed to parse pkcs1 key: %v" , err )
130
+ }
131
+ privateKey , _ = pk .(* rsa.PrivateKey )
132
+ return privateKey
133
+ }
134
+
105
135
func parseCertificates (pemData string ) []* x509.Certificate {
106
136
var certs []* x509.Certificate
137
+ decoded := decodeBase64Pem (pemData )
107
138
for {
108
- block , rest := pem .Decode ([]byte (pemData ))
139
+ block , rest := pem .Decode ([]byte (decoded ))
109
140
if block == nil {
110
141
break
111
142
}
@@ -116,7 +147,15 @@ func parseCertificates(pemData string) []*x509.Certificate {
116
147
}
117
148
certs = append (certs , cert )
118
149
}
119
- pemData = string (rest )
150
+ decoded = string (rest )
151
+ }
152
+ if len (certs ) == 0 {
153
+ decoded := decodeBase64Pem (pemData )
154
+ cert , err := x509 .ParseCertificate ([]byte (decoded ))
155
+ if err != nil {
156
+ log .Fatalf ("Failed to parse certificate: %v" , err )
157
+ }
158
+ certs = append (certs , cert )
120
159
}
121
160
return certs
122
161
}
0 commit comments