@@ -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,42 @@ 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
+ pemData := fmt .Sprintf ("-----BEGIN PRIVATE KEY-----\n $s\n -----END PRIVATE KEY-----" , base64data )
119
+
120
+ var privateKey * rsa.PrivateKey
121
+ var err error
122
+ block , _ := pem .Decode ([]byte (pemData ))
123
+ if block == nil {
124
+ log .Println ("Failed to decode pemData block containing private key" )
125
+ privateKey , err = x509 .ParsePKCS1PrivateKey ([]byte (pemData ))
126
+ if err != nil {
127
+ log .Printf ("Failed to parse pemData key: %v" , err )
128
+ } else {
129
+ return privateKey
130
+ }
131
+ }
132
+
133
+ privateKey , err = x509 .ParsePKCS1PrivateKey (block .Bytes )
134
+ if err != nil {
135
+ log .Printf ("Failed to parse private key blocks: %v" , err )
136
+ }
137
+ return privateKey
138
+ }
139
+
105
140
func parseCertificates (pemData string ) []* x509.Certificate {
106
141
var certs []* x509.Certificate
142
+ decoded := decodeBase64Pem (pemData )
107
143
for {
108
- block , rest := pem .Decode ([]byte (pemData ))
144
+ block , rest := pem .Decode ([]byte (decoded ))
109
145
if block == nil {
110
146
break
111
147
}
@@ -116,7 +152,15 @@ func parseCertificates(pemData string) []*x509.Certificate {
116
152
}
117
153
certs = append (certs , cert )
118
154
}
119
- pemData = string (rest )
155
+ decoded = string (rest )
156
+ }
157
+ if len (certs ) == 0 {
158
+ decoded := decodeBase64Pem (pemData )
159
+ cert , err := x509 .ParseCertificate ([]byte (decoded ))
160
+ if err != nil {
161
+ log .Fatalf ("Failed to parse certificate: %v" , err )
162
+ }
163
+ certs = append (certs , cert )
120
164
}
121
165
return certs
122
166
}
0 commit comments