TLS加密传输、CA、证书

密码学背景

对称密码算法

  • 加解密过程使用相同的密钥进行运算,一般效率较高。
  • 主要是用来加解密数据。

非对称密码算法

  • 相对于对称加密算法,非对称密码算法在加解密过程中,使用不同的密钥,分别为公私钥对。
  • 公私钥的关系:可以通过私钥计算得到公钥,但是通过公钥得不到私钥,主要利用了大整数因子分解和离散对数的数学难题。因此通常情况是将公钥公开,自己保护自己的私钥;
  • 其中非对称密码算法的使用场景有两种:
    • 加解密,通常是使用公钥加密,使用私钥解密;其中用法即为TLS中的密钥协商,A用B的公钥加密传给B,只有B能用自己的私钥解密得到明文;
    • 数字签名:假如A使用自己的私钥加密数据(原始数据,加密后数据),B得到这部分数据后,使用A的公钥进行解密得到明文,将明文和原始数据比对,发现一致,则可以证明是A使用自己的私钥签名的;应用场景即为整个CA体系建立的本质。

证书

概念

证书是由CA签发的对用户公钥的凭证。

证书标准

  • X.509 数字证书标准

openssl生成CA签名证书

 openssl genrsa -out ca.key 2048
 openssl genrsa -out server.key 2048
 openssl genrsa -out client.key 2048
 openssl req -new -x509 -days 7200 -key ca.key -out ca.pem
 openssl req -new -key server.key -out server.csr
 openssl x509 -req -sha256 -CA ca.pem -CAkey ca.key -CAcreateserial -days 3650 -in server.csr -out server.pem
 openssl req -new -key client.key -out client.csr
 openssl x509 -req -sha256 -CA ca.pem -CAkey ca.key -CAcreateserial -days 3650 -in client.csr -out client.pem
 openssl x509 -noout -text -in ca.pem


///
openssl genrsa -passout pass:password -out ca.key 4096
openssl req -passin pass:password -new -x509 -key ca.key -out ca.crt -subj  "/C=IT/ST=Italy/L=Rome/O=GRPC/OU=GRPC/CN=Root CA"
openssl genrsa -passout pass:password -out server.key 4096
openssl req -passin pass:password -new -key server.key -out server.csr -subj  "/C=IT/ST=Italy/L=Rome/O=GRPC/OU=GRPC/CN=localhost"
openssl x509 -req -passin pass:password -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt
openssl rsa -passin pass:password -in server.key -out server.key
openssl genrsa -passout pass:password -out client.key 4096
openssl req -passin pass:password -new -key client.key -out client.csr -subj  "/C=IT/ST=Italy/L=Rome/O=GRPC/OU=GRPC/CN=localhost"
openssl x509 -passin pass:password -req -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt
openssl rsa -passin pass:password -in client.key -out client.key

示例

grpc实现双向认证:

http://www.cppblog.com/jinq0123/archive/2018/11/26/216081.aspx
https://github.com/Ablablab/grpc-helloworld-ssl/tree/master/server-cpp/src
https://www.codercto.com/a/41301.html

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MongoDB 支持使用 TLS(Transport Layer Security)协议进行加密和认证,以提供更安全的数据传输。使用 TLS 可以保证 MongoDB 数据库在网络传输过程中的机密性和完整性。 要启用 TLS 加密,需要在 MongoDB 配置文件中指定 TLS 相关的配置参数。主要包括证书、私钥、CA(Certificate Authority)证书等。同时还需要配置客户端连接时的验证方式,包括证书验证和用户名密码验证等。 以下是 MongoDB 配置文件中配置 TLS 的示例: ``` net: port: 27017 tls: mode: requireTLS certificateKeyFile: /etc/ssl/mongodb.pem CAFile: /etc/ssl/ca.pem bindIp: 0.0.0.0 ``` 以上配置文件中,`tls` 部分指定使用 TLS 协议进行加密和认证,`certificateKeyFile` 指定证书和私钥文件,`CAFile` 指定 CA 证书文件。客户端连接时需要提供正确的证书和私钥才能通过 TLS 认证。 同时,还需要在客户端连接 MongoDB 时指定 TLS 相关的配置参数,包括证书和私钥等。以下是使用 Node.js 客户端连接 MongoDB 时指定 TLS 配置的示例代码: ``` const tlsOptions = { key: fs.readFileSync('/path/to/key.pem'), cert: fs.readFileSync('/path/to/cert.pem'), ca: fs.readFileSync('/path/to/ca.pem'), rejectUnauthorized: true }; const client = await MongoClient.connect('mongodb://localhost:27017/mydb', { tls: true, tlsOptions: tlsOptions }); ``` 以上代码中,`tlsOptions` 指定客户端连接时使用的证书、私钥和 CA 证书等。`rejectUnauthorized` 指定是否验证服务器证书。如果设置为 `true`,则客户端连接时需要提供正确的 CA 证书才能通过验证。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值