Я хочу сделать мыльный вызов, используя http запросы go lang.У меня есть сертификат pfx с паролем, и я создал три файла расширения pem для личного, клиентского сертификата и личного ключа, как показано ниже.
openssl pkcs12 -in XXXX.pfx -nocerts -nodes -out key.pem
openssl pkcs12 -in XXXX.pfx -cacerts -nokeys -out root.crt
openssl pkcs12 -in XXXX.pfx -clcerts -nokeys -out client.crt
Затем я выполняю приведенный ниже файл GO Lang, который вызывает x509: сертификат подписан неизвестным органом * ошибка 1005 *.
основной пакет
import (
"bytes"
"crypto/tls"
"crypto/x509"
"fmt"
"io/ioutil"
"log"
"net/http"
"time"
)
const (
DATA = `XML_TEMPLATE`
)
func createClientConfig(ca, crt, key string) (*tls.Config, error) {
caCertPEM, err := ioutil.ReadFile(ca)
if err != nil {
return nil, err
}
roots := x509.NewCertPool()
ok := roots.AppendCertsFromPEM(caCertPEM)
if !ok {
panic("failed to parse root certificate")
}
cert, err := tls.LoadX509KeyPair(crt, key)
if err != nil {
return nil, err
}
return &tls.Config{
CipherSuites: []uint16{tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384},
Certificates: []tls.Certificate{cert},
RootCAs: roots,
InsecureSkipVerify: false,
PreferServerCipherSuites: true,
}, nil
}
func main() {
var url = "/certificates/"
clientCert := url + "client.pem"
clientKey := url + "key.pem"
rootCert := url + "root.pem"
tlsConfig, err := createClientConfig(rootCert, clientCert, clientKey)
if err != nil {
fmt.Println("Inside the error:::::", err)
return
}
tlsConfig.BuildNameToCertificate()
tr := &http.Transport{TLSClientConfig: tlsConfig}
c := &http.Client{
Transport: tr,
Timeout: 15 * time.Second,
}
request_url := "URL"
resp, errPost := c.Post(request_url, "text/xml", bytes.NewBufferString(DATA))
if errPost != nil {
log.Fatalf("post error: %v", errPost)
}
body, errBody := ioutil.ReadAll(resp.Body)
resp.Body.Close()
if errBody != nil {
log.Fatalf("body error: %v", errBody)
}
fmt.Printf("done - body: %v", string(body))
}
Если я сделаю InsecureSkipVerify как true Я получаю данные без каких-либо ошибок.Что мне делать, если я хочу сделать это безопасным?Есть ли возможность отправить файл pfx и pass_phrase непосредственно в вызове http?