Skip to content

Commit 92ec6f5

Browse files
authored
Bundle root CAs in the CLI (stripe#444)
1 parent b95cd5b commit 92ec6f5

File tree

9 files changed

+375
-0
lines changed

9 files changed

+375
-0
lines changed

Makefile

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,13 @@ update-openapi-spec:
9090
wget https://raw.githubusercontent.com/stripe/openapi/master/openapi/spec3.sdk.json -P ./api/openapi-spec
9191
.PHONY: update-openapi-spec
9292

93+
# Updates the DigiCert root certs
94+
update-digicert-pem:
95+
rm -f ./data/certs/*.pem
96+
wget https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem -P ./data/certs
97+
wget https://cacerts.digicert.com/DigiCertHighAssuranceEVRootCA.crt.pem -P ./data/certs
98+
.PHONY: update-digicert-pem
99+
93100
# Releases a new version
94101
release:
95102
# This does not release anything from your local machine but creates a tag
Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
3+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
4+
d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
5+
QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
6+
MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
7+
b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
8+
9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
9+
CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
10+
nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
11+
43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
12+
T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
13+
gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
14+
BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
15+
TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
16+
DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
17+
hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
18+
06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
19+
PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
20+
YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
21+
CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
22+
-----END CERTIFICATE-----
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
-----BEGIN CERTIFICATE-----
2+
MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
3+
MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
4+
d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
5+
ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
6+
MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
7+
LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
8+
RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
9+
+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
10+
PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
11+
xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
12+
Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
13+
hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
14+
EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
15+
MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
16+
FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
17+
nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
18+
eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
19+
hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
20+
Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
21+
vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
22+
+OkuE6N36B9K
23+
-----END CERTIFICATE-----

pkg/stripe/certsfs.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
//+build dev
2+
3+
package stripe
4+
5+
import "net/http"
6+
7+
// FS exports the filesystem
8+
var CertsFS http.FileSystem = http.Dir("../../data/certs")

pkg/stripe/certsfs_vfsdata.go

Lines changed: 194 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pkg/stripe/client.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package stripe
33
import (
44
"context"
55
"io"
6+
"log"
67
"net"
78
"net/http"
89
"net/url"
@@ -113,12 +114,18 @@ func newHTTPClient(verbose bool, unixSocket string) *http.Client {
113114
TLSHandshakeTimeout: 10 * time.Second,
114115
}
115116
} else {
117+
tlsConfig, err := GetTLSConfig()
118+
if err != nil {
119+
log.Fatal(err)
120+
}
121+
116122
httpTransport = &http.Transport{
117123
Proxy: http.ProxyFromEnvironment,
118124
DialContext: (&net.Dialer{
119125
Timeout: 30 * time.Second,
120126
KeepAlive: 30 * time.Second,
121127
}).DialContext,
128+
TLSClientConfig: tlsConfig,
122129
TLSHandshakeTimeout: 10 * time.Second,
123130
}
124131
}

pkg/stripe/tls_config.go

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
//go:generate go run -tags=dev vfsgen.go
2+
3+
package stripe
4+
5+
import (
6+
"crypto/tls"
7+
"crypto/x509"
8+
"io/ioutil"
9+
)
10+
11+
// GetTLSConfig returns a tls.Config object that uses the bundled DigiCert CA
12+
// certificates rather than the system's cert store.
13+
func GetTLSConfig() (*tls.Config, error) {
14+
caCertPool := x509.NewCertPool()
15+
16+
f, err := CertsFS.Open("/DigiCertGlobalRootCA.crt.pem")
17+
if err != nil {
18+
return nil, err
19+
}
20+
filedata, err := ioutil.ReadAll(f)
21+
if err != nil {
22+
return nil, err
23+
}
24+
caCertPool.AppendCertsFromPEM(filedata)
25+
26+
f, err = CertsFS.Open("/DigiCertHighAssuranceEVRootCA.crt.pem")
27+
if err != nil {
28+
return nil, err
29+
}
30+
filedata, err = ioutil.ReadAll(f)
31+
if err != nil {
32+
return nil, err
33+
}
34+
caCertPool.AppendCertsFromPEM(filedata)
35+
36+
return &tls.Config{
37+
RootCAs: caCertPool,
38+
}, nil
39+
}

0 commit comments

Comments
 (0)