当前位置: 首页 > 知识库问答 >
问题:

使用证书颁发机构签署证书请求

施翰学
2023-03-14

我想使用TLS相互身份验证在Go中制造的API上对一个客户端进行身份验证。我已经创建了一个证书颁发机构,假设Bob有一个他想与客户机一起使用的密钥对。Bob创建了一个证书请求,并希望我验证他的证书,以便在API上进行授权和身份验证。

我已使用此方法创建了我的证书颁发机构:

openssl genrsa -aes256 -out ca.key 4096
openssl req -new -x509 -sha256 -days 730 -key ca.key -out ca.crt

Bob使用它来创建他的证书和证书请求:

openssl genrsa -out bob.key 4096
openssl req -new -key bob.key -out bob.csr

我想实现这一点,但在围棋:

openssl x509 -req -days 365 -sha256 -in bob.csr -CA ca.crt -CAkey ca.key -set_serial 3 -out bob.crt
func createTLSConfig(certFile string, keyFile string, clientCAFilepath string) (config *tls.Config, err error) {
    cer, err := tls.LoadX509KeyPair(certFile, keyFile)
    if err != nil {
        return nil, err
    }

    clientCAFile, err := ioutil.ReadFile(clientCAFilepath)
    if err != nil {
        return nil, err
    }
    clientCAPool := x509.NewCertPool()
    clientCAPool.AppendCertsFromPEM(clientCAFile)

    config = &tls.Config{
        Certificates: []tls.Certificate{cer},
        ClientAuth: tls.RequireAndVerifyClientCert,
        ClientCAs:  clientCAPool,
        CipherSuites: []uint16{
            tls.TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
            tls.TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384,
        },
        PreferServerCipherSuites: true,
        SessionTicketsDisabled:   false,
        MinVersion:               tls.VersionTLS12,
        CurvePreferences:         []tls.CurveID{tls.CurveP521, tls.CurveP384},
    }

    return config, nil
}

但如果朱莉娅现在想登录怎么办?她将必须创建一个CSR,发送给我,我将不得不手动验证她的CSR到一个CRT。为了避免这种手动操作,需要有一个registerendpoint,在这里,Julia可以提交她的CSR并取回有效的CRT。endpoint基本上如下所示:

func Register(c echo.Context) (err error) {
    // get Julia's csr from POST body
    csr := certificateFromBody(c.Body)

    // valid csr with ca to generate the crt
    crt := signCSR(csr, config.ClientCAPath)

    // return the crt to julia
    return c.JSON(http.StatusCreated, base64.StdEncoding.EncodeToString(crt))
}

我花了一些时间来理解openssl如何使用CA从CRS创建CRT,但没有成功。

Golang有一个来自Crypto/X509包的CertificateRequest对象,我可以使用ParseCertificateRequest创建该对象,但我找不到获取该对象和我的CA并返回证书的函数。

谢谢你的帮助!

共有1个答案

申屠黎昕
2023-03-14

您可能可以使用X509.CreateCertificate。

CreateCertificate的参数之一是'template'证书。

您可以使用Julia的CertificateRequest中的字段设置模板证书的字段。

这假设来自Julia的API请求真的来自Julia,并且具有足够的可信度来签署请求并返回证书。

此外,在围棋中为TLS使用自己的PKI可能会有帮助。

 类似资料:
  • 问题内容: 我想使用TLS相互身份验证来验证go制成的API上的客户端。我创建了一个证书颁发机构,假设鲍勃有一个他想与客户端一起使用的密钥对。鲍勃(Bob)创建了一个证书请求,希望我验证他的证书,以便在API上进行授权和身份验证。 我用它来创建我的证书颁发机构: Bob用它来创建他的证书和证书请求: 我想实现这一目标,但是请继续: 现在,通过这些命令,Bob可以使用此tls.Config创建到我的

  • 您应该使用什么方式与您的证书颁发机构签署证书请求?一种方法比另一种方法好吗(例如,一种方法被弃用)?

  • 我正在使用和创建。我正在使用该公司的VPN。 通过kubectl create-f./rc/mongo-rc.yaml命令创建了RC。 使用kubectl describe pod mongo-5zttk命令时出现以下kubernetes事件: 当我尝试使用访问网址时: 我可以成功地从泊坞中心注册表中提取 映像。 环境信息: minikube版本:v1.14.1 kubectl 客户端版本:v1.

  • 我使用Spring Security使用x.509证书进行身份验证,它仅在浏览器密钥存储库中配置的客户端证书存在于服务器信任存储库中时才工作。 它目前是如何工作的: 我已将SSL客户端身份验证配置为可选(server.SSL.client auth=want,如本文所示) 我已经配置了一个包含所有客户端证书的服务器信任存储。如果客户端提供的证书位于信任存储中,则会创建相互SSL连接 当我的客户端证

  • 我试图配置RBAC来添加访问受限的新用户。我正在遵循以下教程:https://docs.bitnami.com/kubernetes/how-to/configure-rbac-in-your-kubernetes-cluster/#use-case-1-create-user-with-limited-namespace-access 它要求我使用Kubernetes CA批准用户签名请求: 找