由网络副手--寻路人于2022.11.29 08:31:00发布在Go语言 go gRpc案例分享-gRpc介绍和使用(三) 认证 阅读1461 评论0 喜欢0 #前言 本篇内容主要接上一篇内容继续编辑,主要针对案例中使用的域名进行签名签名认证,生成服务需要证书 [go gRpc案例分享-gRpc介绍和使用(二) 案例介绍](http://www.bravedu.com/archives/261/ "go gRpc案例分享-gRpc介绍和使用(二) 案例介绍") 以下为我们生成之后证书目录 和 证书相关文件,名称都可以自定义,下面名称仅为例子 ``` ├── cert │ ├── ca.crt │ ├── ca.csr //公钥 │ ├── ca.key //私钥 │ ├── ca.srl │ ├── client_grpc.bravedu.csr │ ├── client_grpc.bravedu.key │ ├── client_grpc.bravedu.pem │ ├── grpc.bravedu.csr │ ├── grpc.bravedu.key │ ├── grpc.bravedu.pem │ └── openssl.cnf ``` ##为什么需要证书 为了让客户端、服务端之间的调用更安全,防止工具的拦截数据篡改。 OSI 模型  TLS(安全传输层), TLS 建立在传输层TCP协议之上的协议,服务于应用层,前身为SSL(安全套接字),它实现了将应用层报文进行加密后再交由TCP进行传输的功能。 TLS 协议主要解决: 1、保密性,通过加密encryption实现,所有信息都加密传输,三方无法嗅探 2、完整性, 通过MAC校验机制,一旦被篡改,通信双方立即发现 3、认证性, 双方认证,双方都可以配备证书,防止身份冒充 ##上面的证书如何生成呢? 又有什么用呢? ### 1、第一步生成私钥文件 ca.key ``` openssl genrsa -des3 -out ca.key 2048 ``` ###2、第二步生成公钥 ``` openssl req -new -key ca.key -out ca.csr ``` ###3、第三步生成 crt证书 ``` openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt ``` 由于所用的Go版本为1.17, 所以需要生成证书为 SAN 证书, 在1.15 以上3步结束即可 ###4、由于使用openssl 生成, 修改配置文件用于生成时候指定生效 4.1 找到openssl 配置文件 ``` linux系统 : /etc/pki/tls/openssl.cnf Mac系统: /System/Library/OpenSSL/openssl.cnf Windows:安装目录下 openssl.cfg 比如 D:\Program Files\OpenSSL-Win64\bin\openssl.cfg ``` 4.2 拷贝到cert 目录下用于修改 4.3 修改内容 ``` #1. 找到如下两处打开注释 copy_extensions = copy req_extensions = v3_req #2. 查找 [ v3_req ], 在下面新增一行 [ v3_req ] subjectAltName = @alt_names #3. 新增标签 [ alt_names ] DNS.1 = *.grpc.bravedu.com ``` ###5. 生成服务间调用的根证书私钥 grpc.bravedu.key ``` openssl genpkey -algorithm RSA -out grpc.bravedu.key ``` ###6. 生成证书请求文件 grpc.bravedu.csr ``` openssl req -new -nodes -key grpc.bravedu.key -out grpc.bravedu.csr -days 3650 -config ./openssl.cnf -extensions v3_req ``` ###7. 生成SAN证书,相当于证书颁发机构,通过CA生成 (SAN 是SSL 标准X509 中定义的一个扩展。使用了SAN字段的SSL证书,可以扩展此证书支持的域名,使得一个证书可以支持多个不同域名的解析) 这里就使用到最开始生成的ca文件了 ``` openssl x509 -req -days 365 -in grpc.bravedu.csr -out grpc.bravedu.pem \ -CA ca.crt -CAkey ca.key -CAcreateserial -extfile ./openssl.cnf -extensions v3_req //输入ca 设定的密码即可 ``` 针对以上文件简单介绍: key : 服务器上的私钥文件,用于对发送给客户端数据进行加密,以及对客户端接收到数据进行解密 csr: 证书请求文件,用于提交给证书颁发机构(CA) 对证书签名 crt: 由证书颁发机构(CA)签名后的证书, 或者开发者自签名证书,包含证书持有人信息,持有人公钥,以及签署者的签名信息 pem: 基于Base64 编码的证书格式,扩展包括PEM /CRT/CER, PEM 和 CRT都一样,后者多用于window,前者用于Linux ##客户端证书生成 ### 私钥 ``` openssl genpkey -algorithm RSA -out client_grpc.bravedu.key ``` ###客户端csr 证书 ``` openssl req -new -nodes -key client_grpc.bravedu.key -out client_grpc.bravedu.csr -days 3650 \ -config ./openssl.cnf -extensions v3_req ``` ### 客户端SAN证书 ``` openssl x509 -req -days 365 -in client_grpc.bravedu.csr -out client_grpc.bravedu.pem \ -CA ca.crt -CAkey ca.key -CAcreateserial -extfile ./openssl.cnf -extensions v3_req ``` 赞 0 分享 赏 您可以选择一种方式赞助本站 支付宝扫码赞助 BraveDu 署名: 网络副手~寻路人