@@ -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"
@@ -21,7 +23,7 @@ func main() {
21
23
// Load configuration
22
24
cfg , err := config .LoadConfig (os .Getenv ("REDIS_ENDPOINTS_CONFIG_PATH" ))
23
25
if err != nil {
24
- log .Fatalf ("Failed to load config: %v" , err )
26
+ log .Printf ("Failed to load config: %v" , err )
25
27
}
26
28
27
29
// Create a confidential identity credentials provider with certificate authentication
@@ -36,11 +38,11 @@ func main() {
36
38
},
37
39
Scopes : cfg .GetRedisScopes (),
38
40
ClientCert : parseCertificates (cfg .AzureCert ),
39
- ClientPrivateKey : [] byte (cfg .AzurePrivateKey ),
41
+ ClientPrivateKey : parsePrivateKey (cfg .AzurePrivateKey ),
40
42
},
41
43
})
42
44
if err != nil {
43
- log .Fatalf ("Failed to create credentials provider: %v" , err )
45
+ log .Printf ("Failed to create credentials provider: %v" , err )
44
46
}
45
47
46
48
// Create Redis client with streaming credentials provider
@@ -102,21 +104,57 @@ func main() {
102
104
fmt .Printf ("Retrieved value from cluster: %s\n " , clusterVal )
103
105
}
104
106
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
+ decoded := decodeBase64Pem (base64data )
119
+ pk , err := x509 .ParsePKCS8PrivateKey ([]byte (decoded ))
120
+ if err != nil {
121
+ log .Printf ("Failed to parse pkcs8 key: %v" , err )
122
+ }
123
+ privateKey , _ = pk .(* rsa.PrivateKey )
124
+ if privateKey == nil {
125
+ pk , err = x509 .ParsePKCS1PrivateKey ([]byte (decoded ))
126
+ if err != nil {
127
+ log .Printf ("Failed to parse pkcs1 key: %v" , err )
128
+ }
129
+ privateKey , _ = pk .(* rsa.PrivateKey )
130
+ }
131
+ return privateKey
132
+ }
133
+
105
134
func parseCertificates (pemData string ) []* x509.Certificate {
106
135
var certs []* x509.Certificate
136
+ decoded := decodeBase64Pem (pemData )
107
137
for {
108
- block , rest := pem .Decode ([]byte (pemData ))
138
+ block , rest := pem .Decode ([]byte (decoded ))
109
139
if block == nil {
110
140
break
111
141
}
112
142
if block .Type == "CERTIFICATE" {
113
143
cert , err := x509 .ParseCertificate (block .Bytes )
114
144
if err != nil {
115
- log .Fatalf ("Failed to parse certificate: %v" , err )
145
+ log .Printf ("Failed to parse certificate: %v" , err )
116
146
}
117
147
certs = append (certs , cert )
118
148
}
119
- pemData = string (rest )
149
+ decoded = string (rest )
150
+ }
151
+ if len (certs ) == 0 {
152
+ decoded := decodeBase64Pem (pemData )
153
+ cert , err := x509 .ParseCertificate ([]byte (decoded ))
154
+ if err != nil {
155
+ log .Printf ("Failed to parse certificate: %v" , err )
156
+ }
157
+ certs = append (certs , cert )
120
158
}
121
159
return certs
122
160
}
0 commit comments