Go Heroku丢失了GeoTrust全局CA根证书

Go Heroku丢失了GeoTrust全局CA根证书,go,heroku,ssl-certificate,root-certificate,Go,Heroku,Ssl Certificate,Root Certificate,Heroku不知何故丢失了GeoTrust全局CA根证书,该证书是在苹果服务器上使用推送通知所必需的。我找到了证书,但我不确定如何在Heroku应用程序中安装它。我尝试通过应用程序的设置将其添加为SSL证书,但它说我需要私钥-根证书从哪里获得私钥?还是我应该在别的地方加上这个 我应该指定我的应用程序是一个golang应用程序。我们在spring boot应用程序中也遇到了类似的问题,该应用程序使用工件“pushy”的依赖项,groupId“com.eatthepath”和“0.14.2”版本的A

Heroku不知何故丢失了GeoTrust全局CA根证书,该证书是在苹果服务器上使用推送通知所必需的。我找到了证书,但我不确定如何在Heroku应用程序中安装它。我尝试通过应用程序的设置将其添加为SSL证书,但它说我需要私钥-根证书从哪里获得私钥?还是我应该在别的地方加上这个


我应该指定我的应用程序是一个golang应用程序。

我们在spring boot应用程序中也遇到了类似的问题,该应用程序使用工件“pushy”的依赖项,groupId“com.eatthepath”和“0.14.2”版本的APN推送通知,并部署在heroku中。为了解决这个问题,我们遵循了这个链接中的步骤:在构建ApnsClientBuilder时,还使用了“CaCertUtil”类和“GeoTrust_Global_CA.pem”文件并添加了“.setTrustedServerCertificateCain(CaCertUtil.allCerts());”行


“CaCertUtil”和“GeoTrust_Global_CA.pem”取自此链接。

本周我们遇到了一个类似的问题,并通过直接在Heroku Dashboard中向应用程序变量添加证书解决了这个问题。 根据文档,您还可以再次手动添加CA。

我重新定义了sideshow/apns2客户端工厂功能,将GeoTrust CA包含在rootCAs中,我在Heroku上的应用程序可以访问苹果的apns服务器

const (
    GeoTrustCACert = "<path to GeoTrust_Global_CA.pem>"
)

func newCertPool(certPath string) (*x509.CertPool, error) {
    rootCAs, _ := x509.SystemCertPool()
    if rootCAs == nil {
        rootCAs = x509.NewCertPool()
    }

    certs, err := ioutil.ReadFile(certPath)
    if err != nil {
        return nil, errors.New("no certs appended, using system certs only")
    }

    if ok := rootCAs.AppendCertsFromPEM(certs); !ok {
        log.Println("no certs appended, using systems only certs")
    }
    return rootCAs, nil
}

func NewApns2ClientWithGeoTrustCA(certificate tls.Certificate) *apns2.Client {
    rootCas, err := newCertPool(GeoTrustCACert)
    if err != nil {
        return nil
    }
    tlsConfig := &tls.Config{
        RootCAs:      rootCas,
        Certificates: []tls.Certificate{certificate},
    }

    if len(certificate.Certificate) > 0 {
        tlsConfig.BuildNameToCertificate()
    }
    transport := &http2.Transport{
        TLSClientConfig: tlsConfig,
        DialTLS:         apns2.DialTLS,
    }

    return &apns2.Client{
        HTTPClient: &http.Client{
            Transport: transport,
            Timeout:   apns2.HTTPClientTimeout,
        },
        Certificate: certificate,
        Host:        apns2.DefaultHost,
    }

}

const(
GeoTrustCACert=“”
)
func newCertPool(certPath字符串)(*x509.CertPool,错误){
rootCAs,x509:=x509.SystemCertPool()
如果rootCAs==nil{
rootCAs=x509.NewCertPool()
}
证书,err:=ioutil.ReadFile(certPath)
如果错误!=零{
返回nil,errors.New(“没有附加证书,仅使用系统证书”)
}
如果确定:=rootCAs.AppendCertsFromPEM(certs);!确定{
Println(“不附加证书,仅使用系统证书”)
}
返回rootCAs,无
}
func NewAPNS2客户端与GeoTrustCA(证书tls.certificate)*apns2.Client{
rootCas,err:=newCertPool(GeoTrustCACert)
如果错误!=零{
归零
}
tlsConfig:=&tls.Config{
RootCAs:RootCAs,
证书:[]tls.Certificate{Certificate},
}
如果len(certificate.certificate)>0{
tlsConfig.BuildNameToCertificate()
}
传输:=&http2.transport{
TLSClientConfig:tlsConfig,
DialTLS:apns2.DialTLS,
}
return&apns2.Client{
HTTPClient:&http.Client{
运输:运输,,
超时:apns2.HTTPClientTimeout,
},
证书:证书,
主机:apns2.DefaultHost,
}
}