后浪笔记一零二四

x509证书的使用场景很多,可以用来建立tls连接,也可以用来做客户端身份认证,那通过什么来标识证书的用途呢?

在x509的标准规范里,有key usage 和 extended key usage 这两个属性,可以用来定义key的用途。

在nats里,通过扩展密钥(extended key usage)来标识证书的用户:

  • TLS WWW server authentication: 作为连接服务器的身份验证,NATS服务器端证书需要包含此内容的证书。
  • TLS WWW client authentication: 作为NATS客户端证书用于身份验证,仅在连接到指定了verify、verify_and_mapverify_cert_and_check_known_urls的服务器时才需要。在这些情况下,NATS客户端将需要具有此值的证书。

使用mkcert自签证书,需要增加-client参数,如:

$ mkcert -client -cert-file client-cert.pem -key-file client-key.pem localhost ::1 email@localhost
  1. 服务端的配置
tls {
  cert_file: "./devincloud.cn+4.pem",
  key_file:  "./devincloud.cn+4-key.pem",
  ca_file:   "./rootCA.pem",
  verify:    true
}

为何配置上ca_file和verify呢?因为对于管理员来说,可能有很多人都要用我的nats服务,我可以给每一个用户都单独签一个证书,他们用这个证书来调用我的这个NATS服务(用这个ca的根证书的这个私钥签名的所有tls证书都认为是合法的客户端)。verify主要是我要用这个公钥rootCA.pem去确认这个证书的合法性。

  1. 客户端如何连接服务端
$ nats account info --tlscert ./client-cert.pem --tlskey ./client-key.pem

tls证书和用户关联起来

上面的操作,只能保证让客户端连上来,但是无法识别这些客户端。

客户端其实还可以跟我系统的这个user做一一的对应,那这个时候服务端怎么配呢?

  1. 服务端配置
tls {
  cert_file: "./devincloud.cn+4.pem",
  key_file:  "./devincloud.cn+4-key.pem",
  ca_file:   "./rootCA.pem",
  verify:    true
}

authorization {
  users = [
    {user: "OU=cjzhao@qq.com,O=mkcert development certificate"}
  ]
}

用户信息从哪里来的呢? 这需要看证书的具体内容。

openssl x509 -noout -text -in client-cert.pem

看输出的Subject部分,用户需要和Subject的部分一一对应,但是需要将OU放前面,O放后面

  1. 客户端如何使用用户来连接
$ nats account info --tlscert ./client-cert.pem --tlskey ./client-key.pem

本文发表于 0001-01-01,最后修改于 0001-01-01。

本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。


上一篇 « 下一篇 »

赞赏支持

请我吃鸡腿 =^_^=

i ysf

云闪付

i wechat

微信

推荐阅读

Big Image