使用瓜瓜的mtls服务

首先要在你的系统上有openssl, 这里略过安装openssl

1
2
3
4
# 1. 生成服务端证书的RSA私钥
openssl genrsa -out qrimtls.key 2048
# 2. 生成证书签名请求. 更改后面的CN
openssl req -new -key qrimtls.key -out qrimtls.csr -subj "/CN=SomeClient"

将生成的证书签名请求qrimtls.csr文件发送给瓜瓜, 然后瓜瓜会给你一个签名证书qrimtls.crt文件, 之后执行下面的命令生成给操作系统安装的p12文件:

1
2
# 改下后面的name
openssl pkcs12 -legacy -export -out qrimtls.p12 -inkey qrimtls.key -in qrimtls.crt -name "SomeCert"

然后将生成的p12安装至系统证书就可以了

-legacy的说明 这里-legacy的原因是, 打包p12其实是把私钥打包进p12文件了, 所以需要用一个密码和算法来保护p12里的私钥. openssl认为一些算法已经不安全了, 不适合用来打包p12, 但是操作系统还在用, 操作系统不支持新的算法, 所以要用-legacy使用旧版的加密算法来兼容操作系统
这里只是p12打包算法是旧的, 并不影响秘钥本身的安全性, 只要不把p12到处传播就行
macos的话 详见这里:
https://docs.strongswan.org/docs/5.9/interop/appleIkev2Profile.html#_known_issues
windows和安卓的话, 详见这里:
https://docs.strongswan.org/docs/5.9/pki/pkiQuickstart.html#_pkcs12_container

关于安全性

这个秘钥由客户端生成, 并没有安装瓜瓜的ca证书, 所以就算是瓜瓜真的成为了你的网络中间人, 也不可能解密你的其他https的流量

扩展: 浏览器自动选择证书

在使用浏览器访问需要mtls的链接时, 比如访问https://kuma.qri.blue:58888/, 浏览器会让你手动选取一个安装在系统上的客户端证书
这个手动选择证书的动作可以改为自动选取, 依靠这个Chrome Policy

在macos上, 你可以执行这样的命令 来设置访问瓜瓜服务的默认证书:

1
2
3
4
5
defaults write com.google.Chrome AutoSelectCertificateForUrls -array

# pattern: url匹配, 这里匹配瓜瓜mTLS服务的url
# filter: 用来选择系统上可使用的客户端证书, 这里指定了ISSUER的CN, 意思是指定了使用 颁发者是瓜瓜的证书
defaults write com.google.Chrome AutoSelectCertificateForUrls -array-add -string '{"pattern":"https://[*.]qri.blue:58888","filter":{"ISSUER":{"CN":"CuCA"}}}'