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_map
或verify_cert_and_check_known_urls
的服务器时才需要。在这些情况下,NATS客户端将需要具有此值的证书。
使用mkcert自签证书,需要增加-client
参数,如:
$ mkcert -client -cert-file client-cert.pem -key-file client-key.pem localhost ::1 email@localhost
- 服务端的配置
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去确认这个证书的合法性。
- 客户端如何连接服务端
$ nats account info --tlscert ./client-cert.pem --tlskey ./client-key.pem
tls证书和用户关联起来
上面的操作,只能保证让客户端连上来,但是无法识别这些客户端。
客户端其实还可以跟我系统的这个user做一一的对应,那这个时候服务端怎么配呢?
- 服务端配置
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放后面
- 客户端如何使用用户来连接
$ nats account info --tlscert ./client-cert.pem --tlskey ./client-key.pem
本文发表于 0001-01-01,最后修改于 0001-01-01。
本站永久域名「 jiavvc.top 」,也可搜索「 后浪笔记一零二四 」找到我。