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


版权声明:本文为lxb122435677原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。