mirror of
https://github.com/chai2010/advanced-go-programming-book.git
synced 2025-05-28 23:42:21 +00:00
commit
226887bb96
@ -20,7 +20,7 @@ $ openssl req -new -x509 -days 3650 \
|
||||
-key client.key -out client.crt
|
||||
```
|
||||
|
||||
以上命令将生成server.key、server.crt、client.key和client.crt四个文件。其中以.key为后缀名的是私钥文件,需要妥善保管。以.crt为后缀名是证书文件,也可以简单理解为公钥文件,并不需要秘密保存。在subj参数中的`/CN=server.grpc.io`表示服务的名字为`server.grpc.io`,在验证服务器的证书时需要用到该信息。
|
||||
以上命令将生成server.key、server.crt、client.key和client.crt四个文件。其中以.key为后缀名的是私钥文件,需要妥善保管。以.crt为后缀名是证书文件,也可以简单理解为公钥文件,并不需要秘密保存。在subj参数中的`/CN=server.grpc.io`表示服务器的名字为`server.grpc.io`,在验证服务器的证书时需要用到该信息。
|
||||
|
||||
有了证书之后,我们就可以在启动GRPC服务时传入证书选项参数:
|
||||
|
||||
@ -62,11 +62,11 @@ func main() {
|
||||
}
|
||||
```
|
||||
|
||||
其中redentials.NewClientTLSFromFile是构造客户端用的证书对象,第一个参数是服务器的证书文件,第二个参数是签发服务器证书时的名字。然后通过grpc.WithTransportCredentials(creds)将证书对象转为参数选项传人grpc.Dial函数。
|
||||
其中redentials.NewClientTLSFromFile是构造客户端用的证书对象,第一个参数是服务器的证书文件,第二个参数是签发证书的服务器的名字。然后通过grpc.WithTransportCredentials(creds)将证书对象转为参数选项传人grpc.Dial函数。
|
||||
|
||||
以上这种方式,需要提前将服务器的证书告知客户端,这样客户端在链接服务器时才能进行对服务器证书认证。在复杂的网络环境中,服务器证书的传输本身也是一个非常危险的问题。如果在中间某个环节,服务器证书被监听或替换那么对服务器的认证也将不再可靠。
|
||||
|
||||
为了避免证书的传递过程中被串改,可以通过一个安全可靠的根证书分别对服务器和客户端的证书进行签名。这样客户端或服务器在收到对方的证书后可以通过根证书进行验证证书的有效性。
|
||||
为了避免证书的传递过程中被篡改,可以通过一个安全可靠的根证书分别对服务器和客户端的证书进行签名。这样客户端或服务器在收到对方的证书后可以通过根证书进行验证证书的有效性。
|
||||
|
||||
根证书的生成方式和签名的自签名证书的生成方式类似:
|
||||
|
||||
@ -200,7 +200,7 @@ type PerRPCCredentials interface {
|
||||
}
|
||||
```
|
||||
|
||||
在GetRequestMetadata方法中返回认证需要对必要信息。RequireTransportSecurity方法表示是否求底层使用安全链接。在真实对环境中建议底层必须要求启用安全对链接,否则认证信息有泄露和被串改的风险。
|
||||
在GetRequestMetadata方法中返回认证需要对必要信息。RequireTransportSecurity方法表示是否求底层使用安全链接。在真实对环境中建议底层必须要求启用安全对链接,否则认证信息有泄露和被篡改的风险。
|
||||
|
||||
我们可以创建一个Authentication类型,用于实现用户名和密码对认证:
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user