第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有證書、私鑰和密碼短語的 TLS

帶有證書、私鑰和密碼短語的 TLS

Go
縹緲止盈 2023-06-19 14:14:52
我正在與為我提供證書的銀行服務(wù)器集成。我pem用證書創(chuàng)建了一個文件,所以現(xiàn)在我有了證書、文件中的私鑰pem和密鑰的密碼短語。新生成的文件pem正在使用 OpenSSL 命令建立 SSL 連接,如下所示:openssl s_client -connect host:port -key key.pem -cert cert.pem此命令請求密碼,我可以連接。但是我無法使用我的 Go 代碼連接到相同的代碼,它看起來像這樣:package mainimport (    "crypto/tls"    "crypto/x509"    "fmt"    "net/http")func main() {    caCert := []byte(`certs pem data`) // this contains both private key and certificates    caCertPool := x509.NewCertPool()    caCertPool.AppendCertsFromPEM(caCert)    // Setup HTTPS client    tlsConfig := &tls.Config{        RootCAs:            caCertPool,        InsecureSkipVerify: true,    }    tlsConfig.BuildNameToCertificate()    transport := &http.Transport{TLSClientConfig: tlsConfig}    client := &http.Client{Transport: transport}    httpRequest, _ := http.NewRequest("GET", "https://test.com", nil)    resp, err := client.Do(httpRequest)    fmt.Printf("resp: [%v] \n Error: [%v]", resp, err)}我也不確定在我的 HTTP 請求中在哪里添加密碼。我得到的錯誤:remote error: tls: bad certificate
查看完整描述

1 回答

?
大話西游666

TA貢獻1817條經(jīng)驗 獲得超14個贊

您似乎將證書頒發(fā)機構(gòu)與客戶端證書混淆了??蛻舳俗C書向服務(wù)器證明你就是你所說的那個人(很像用戶名和密碼),并且使用 CA 以便你知道你正在與正確的服務(wù)器對話。

從適用于您的 openssl 命令來看,您的銀行給了您一個客戶證書和密鑰(盡管這是非常不尋常的;除了您自己,沒有人應(yīng)該持有您的私鑰,尤其是密碼)。

如果客戶端使用該tls.Config.Certificates字段,則用于配置客戶端證書。

證書包含一個或多個證書鏈以呈現(xiàn)給連接的另一端。[...] 進行客戶端身份驗證的客戶端可以設(shè)置證書或 GetClientCertificate。

TLS 證書通常使用tls.LoadX509KeyPair或tls.X509KeyPair加載。但是,這些函數(shù)不直接支持加密密鑰。

相反,您必須自己加載密鑰,使用x509.DecryptPEMBlock對其進行解密,然后您可以使用 tls.X509KeyPair。

以下示例使用 EC 密鑰,因為它的編碼很短,但它與 RSA 密鑰的工作方式相同。

package main


import (

? ? "crypto/tls"

? ? "crypto/x509"

? ? "encoding/pem"

? ? "fmt"

? ? "log"

? ? "net/http"

)


var bundle = []byte(`

-----BEGIN EC PRIVATE KEY-----

Proc-Type: 4,ENCRYPTED

DEK-Info: AES-256-CBC,99586A658F5D2DAC4A8A3CA387CF71CE


25EtKb7ycOI/5R47fYwpiaNERgYnCxCtcrMXJuOgueuxUXjiU0n93hpUpIQqaTLH

dDKhsR1UHvGJVTV4h577RQ+nEJ5z8K5Y9NWFqzfa/Q5SY43kqqoJ/fS/OCnTmH48

z4bL/dJBDE/a5HwJINgqQhGi9iUkCWUiPQxriJQ0i2s=

-----END EC PRIVATE KEY-----

-----BEGIN CERTIFICATE-----

MIIB2TCCAX+gAwIBAgIUUTZvgwwnbC05WHgIHMXxrbZzr6wwCgYIKoZIzj0EAwIw

QjELMAkGA1UEBhMCWFgxFTATBgNVBAcMDERlZmF1bHQgQ2l0eTEcMBoGA1UECgwT

RGVmYXVsdCBDb21wYW55IEx0ZDAeFw0xOTA1MTQxMzAwMDJaFw0xOTA1MTUxMzAw

MDJaMEIxCzAJBgNVBAYTAlhYMRUwEwYDVQQHDAxEZWZhdWx0IENpdHkxHDAaBgNV

BAoME0RlZmF1bHQgQ29tcGFueSBMdGQwWTATBgcqhkjOPQIBBggqhkjOPQMBBwNC

AAScgLGx6SXchEo/s0X3AoF0mQkh3bGf9QY0s/2dPqf3/9irwz35DiDGoaP+FDZv

HnUX+D3tUEPhxkLyzWKKT9HHo1MwUTAdBgNVHQ4EFgQU3eB8oRcmvzZrx9Dkb6ma

MMtu1MkwHwYDVR0jBBgwFoAU3eB8oRcmvzZrx9Dkb6maMMtu1MkwDwYDVR0TAQH/

BAUwAwEB/zAKBggqhkjOPQQDAgNIADBFAiAvw/FqAmGbSlBklp6AHJy9kf9VPyhe

RA93ccNQ+7m1fAIhAOXr8c2QsH2oOYRTbn6bPZjkYQ2jLMaxatKhChBIuyZA

-----END CERTIFICATE-----

`)


func main() {

? ? keyBlock, certsPEM := pem.Decode(bundle)


? ? fmt.Println(x509.IsEncryptedPEMBlock(keyBlock)) // Output: true


? ? // Decrypt key

? ? keyDER, err := x509.DecryptPEMBlock(keyBlock, []byte("foobar"))

? ? if err != nil {

? ? ? ? log.Fatal(err)

? ? }


? ? // Update keyBlock with the plaintext bytes and clear the now obsolete

? ? // headers.

? ? keyBlock.Bytes = keyDER

? ? keyBlock.Headers = nil


? ? // Turn the key back into PEM format so we can leverage tls.X509KeyPair,

? ? // which will deal with the intricacies of error handling, different key

? ? // types, certificate chains, etc.

? ? keyPEM := pem.EncodeToMemory(keyBlock)


? ? cert, err := tls.X509KeyPair(certsPEM, keyPEM)

? ? if err != nil {

? ? ? ? log.Fatal(err)

? ? }


? ? config := &tls.Config{

? ? ? ? Certificates: []tls.Certificate{cert},

? ? }

}


查看完整回答
反對 回復(fù) 2023-06-19
  • 1 回答
  • 0 關(guān)注
  • 182 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號