当前位置: 首页 > news >正文

外贸网站优化服务网站多国语言

外贸网站优化服务,网站多国语言,公司网页邮箱,深圳论坛网站建设一. OpenSSL 1.1 介绍 OpenSSL是一个开放源代码的软件库包#xff0c;用于支持网络通讯过程中的加密。这个库提供的功能包含了SSL和TLS协议的实现#xff0c;并可用于生成密钥、证书、进行密码运算等。 其组成主要包括一下三个组件#xff1a; openssl#xff1a;多用途的命…一. OpenSSL 1.1 介绍 OpenSSL是一个开放源代码的软件库包用于支持网络通讯过程中的加密。这个库提供的功能包含了SSL和TLS协议的实现并可用于生成密钥、证书、进行密码运算等。 其组成主要包括一下三个组件 openssl多用途的命令行工具 libcrypto加密算法库 libssl加密模块应用库实现了ssl及tls openssl可以实现秘钥证书管理、对称加密和非对称加密 。 官网[ Downloads ] - /source/index.html 1.2 Windows安装方法 OpenSSL官网没有提供windows版本的安装包可以选择其它开源平台提供的工具。 Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions 以该工具为例 进入下载界面选择下载的版本下载完之后安装即可。 1.3 生成公钥和私钥 openssl命令详解-CSDN博客 生成私钥openssl genrsa -out rsa_private_key.pem 1024 生成公钥openssl rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem 二. gRPC认证 gRPC默认内置了两种认证方式 SSL/TLS认证基于Token的认证 同时gRPC提供了接口用于扩展自定义认证方式。 2.1 TLS认证 2.1.1 什么是TLS认证 TLSTransport Layer Security安全传输层)TLS是建立在传输层TCP协议之上的协议服务于应用层它的前身是SSLSecure Socket Layer安全套接字层它实现了将应用层的报文进行加密后再交由TCP进行传输的功能。 2.1.2 TLS的作用 TLS协议主要解决如下三个网络安全问题。 保密(message privacy)保密通过加密encryption实现所有信息都加密传输第三方无法嗅探完整性(message integrity)通过MAC校验机制一旦被篡改通信双方会立刻发现认证(mutual authentication)双方认证,双方都可以配备证书防止身份被冒充 2.1.3 TLS认证实例 证书制作 制作公钥自签名公钥(x509)   制作私钥。 #生成一个名为server_private.key的RSA私钥使用SHA256算法和4096位密钥长度。然后使用该私钥生成一个有效期为36500天的自签名证书并将其保存为名为server.pem的文件。同时在证书中添加subjectAltName扩展指定DNS名称为www.wy.com。 openssl req -newkey rsa:4096 -nodes -sha256 -keyout server_private.key -x509 -days 36500 -out server.pem -addext subjectAltName DNS:www.wy.com openssl req生成自签名证书-newkey rsa:4096 生成新的4096位rsa密钥对-sha256使用sha256加密-keyout指定生成的私钥文件-x509指输出证书-days 36500有效期 36500-out输出证书的文件名-addext添加扩展 注意需要在证书中添加subjectAltName扩展指定DNS名称。不然在客户端连接服务器时会报错报错信息为 rpc error: code Unavailable desc connection error: desc transport: authentication handshake failed: tls: failed to verify certificate: x509: certificate relies on legacy Common Name field, use SANs instead         因为go1.15 版本开始废弃CommonName因此推荐使用SAN证书。如果想兼容之前的方式需要设置环境变量 GODEBUG为 x509ignoreCN0。(创建 SSL/TLS 证书时证书依赖于传统的 Common Name (CN) 字段而没有使用现代标准所推荐的 Subject Alternative Names (SANs) 字段。现代的 TLS 客户端比如最新版本的浏览器和安全工具要求证书使用 SANs 字段来指定有效的主机名。) 自定义信息  You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter ., the field will be left blank. ----- Country Name (2 letter code) [AU]:CN #国家 State or Province Name (full name) [Some-State]:SHANGHAI #省份 Locality Name (eg, city) []:SHANGHAI #城市 Organization Name (eg, company) [Internet Widgits Pty Ltd]:BF #公司 Organizational Unit Name (eg, section) []:Dev #部门 Common Name (e.g. server FQDN or YOUR name) []:www.wy.com #服务器名称 Email Address []:xxxxxx.com #邮箱地址 目录结构 示例代码  服务端代码 package mainimport (contextfmtnethello sample-app/grpc/protogoogle.golang.org/grpcgoogle.golang.org/grpc/credentials //引入gRPC认证包 )const (//服务器地址Addr 127.0.0.1:8080 )type helloService struct{}//定义hello 服务 var HelloService helloService{}//实现proto hello service方法 func (h helloService) SayHello(c context.Context, req *hello.HelloRequest) (*hello.HelloResponse, error) {resp : new(hello.HelloResponse)resp.Message fmt.Sprintf(Hello %s, req.Name)return resp, nil }func main() {ls, err : net.Listen(tcp, Addr)if err ! nil {fmt.Println(err)return}//TLS认证cert, err : credentials.NewServerTLSFromFile(..\\..\\key\\server.pem, ..\\..\\key\\server_private.key)if err ! nil {fmt.Println(err)return}//新建一个grpc服务器并开启TLS认证//上面监听并没有进行连接客户端server : grpc.NewServer(grpc.Creds(cert))//注册HelloServicehello.RegisterHelloServer(server, HelloService)fmt.Println(Listen on Addr with TLS)//这里面才会连接客户端需要进行认证server.Serve(ls) }credentials.NewServerTLSFromFile从输入证书文件和密钥文件为服务端构造TLS凭证 grpc.Creds返回一个ServerOption用于设置服务器连接的凭证。 客户端代码 package mainimport (contextfmthello sample-app/grpc/protogoogle.golang.org/grpcgoogle.golang.org/grpc/credentials )const (、//gRPC服务器地址Addr 127.0.0.1:8080 )func main() {//TLS连接cert, err : credentials.NewClientTLSFromFile(..\\..\\key\\server.pem, www.wy.com)if err ! nil {fmt.Println(credentials fail , err)return}//请求连接的时候 需要认证conn, err : grpc.Dial(Addr, grpc.WithTransportCredentials(cert))if err ! nil {fmt.Println(Dial fail, err)return}defer conn.Close()c : hello.NewHelloClient(conn)req : new(hello.HelloRequest)req.Name gRPCresp, err : c.SayHello(context.Background(), req)if err ! nil {fmt.Println(say hello fail, err)return}fmt.Println(resp.Message) }credentials.NewClientTLSFromFile从输入的证书文件中为客户端构造TLS凭证。 grpc.WithTransportCredentials配置连接级别的安全凭证例如TLS/SSL返回一个DialOption用于连接服务器。 proto文件 syntaxproto3; package hello; option go_packagehello;service Hello {rpc SayHello(HelloRequest)returns(HelloResponse){}; }message HelloRequest {string name 1; }message HelloResponse {string message 1; } 使用下面命令生成pb.go文件 protoc --go_outpluginsgrpc:生成pb.go文件地址 -Iproto文件地址 proto文件地址\文件 演示 实际TLS认证不是这样客户端和服务器时分离的。客户端有证书(包含公钥)服务端有证书和私钥。         客户端发送请求给服务器请求连接服务器将证书通过私钥加密后发送给客户端。客户端有证书里面包含服务器私钥对应的公钥。使用公钥对数据进行解密获得证书数据与本地证书数据进行比较。 2.2 Token认证 继续扩展上面的代码实现TLSToken认证机制。 2.2.1 什么是Token认证 Token认证是一种基于Token的身份验证方法用于在客户端和服务器之间进行身份验证。以下是Token认证的主要概念、流程以及优缺点 主要概念 Token的含义Token令牌是服务端生成的一串字符串作为客户端进行请求的一个标识。Token的组成一般包括用户身份标识uid、时间戳time和签名sign等元素。Token的作用Token主要用于身份验证、授权、会话管理和跨域资源共享CORS等方面。 认证流程 用户登录并获取Token用户使用用户名和密码登录成功后服务端生成Token并发送给客户端。客户端存储和使用Token客户端将Token保存在本地如cookie或localStorage并在后续请求中携带该Token。服务端验证Token服务端收到请求后验证Token的合法性若合法则处理请求并返回数据。 2.2.2 示例代码 根据上面的代码实现TLSToken认证机制。 认证原理 客户端发送请求会将Token放到context.Context上下文中服务器收到请求从上下文中获取Token验证然后进行下一步操作。 目录结构 客户端代码 grpc/credential包内默认定义了PerRPCCredentials接口是提供用于自定义接口他的作用是将所需安全认证信息添加到每个RPC上下文中。其包含两个方法。 type PerRPCCredentials interface {//获取当前请求认证所需的元数据GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error)//是否需要基于TLS认证进行安全传输RequireTransportSecurity() bool }package mainimport (contextfmthello sample-app/grpc/protogoogle.golang.org/grpcgoogle.golang.org/grpc/credentials )const (Addr 127.0.0.1:8080//是否使用TLSOpenTLS true )// 自定义认证 type Token struct {Appid stringAppkey string }// 实现自定义认证方法 func (t Token) GetRequestMetadata(ctx context.Context, uri ...string) (map[string]string, error) {return map[string]string{appid: t.Appid,appkey: t.Appkey,}, nil }// 实现自定义认证是否开启TLS func (t Token) RequireTransportSecurity() bool {return OpenTLS }func main() {//TLS连接var opt []grpc.DialOptionif OpenTLS {cert, err : credentials.NewClientTLSFromFile(..\\..\\key\\server.pem, www.wy.com)if err ! nil {fmt.Println(credentials fail , err)return}opt append(opt, grpc.WithTransportCredentials(cert))} else {opt append(opt, grpc.WithInsecure())}//使用自定义认证tk : Token{Appid: 101010,Appkey: i am a key,}opt append(opt, grpc.WithPerRPCCredentials(tk))conn, err : grpc.Dial(Addr, opt...)if err ! nil {fmt.Println(Dial fail, err)return}defer conn.Close()//初始化服务器c : hello.NewHelloClient(conn)req : new(hello.HelloRequest)req.Name gRPCresp, err : c.SayHello(context.Background(), req)if err ! nil {fmt.Println(say hello fail, err)return}fmt.Println(resp.Message) }定义一个结构Token包含Token所需属性字段。实现PerRPCCredentials接口的两个方法。每次调用token信息会通过请求metadata传输到服务端。 下面查看服务端如何获取metadata中信息。  服务端代码 使用metadata.FromIncomingContext从上下文中获取元数据。 package mainimport (contextfmtnethello sample-app/grpc/protogoogle.golang.org/grpcgoogle.golang.org/grpc/codesgoogle.golang.org/grpc/credentials //引入gRPC认证包google.golang.org/grpc/metadata )var Addr 127.0.0.1:8080type helloService struct{}var HelloService helloService{}func (h helloService) SayHello(c context.Context, req *hello.HelloRequest) (*hello.HelloResponse, error) {//认证md, ok : metadata.FromIncomingContext(c)if !ok {return nil, grpc.Errorf(codes.Unauthenticated, 无Token认证信息)}var appid stringvar appkey stringvals : md.Get(appid)if len(vals) ! 0 {appid vals[0]}val_key : md.Get(appkey)if len(val_key) ! 0 {appkey val_key[0]}//认证tokenif appid ! 101010 || appkey ! i am a key {return nil, grpc.Errorf(codes.Unauthenticated, Token认证信息错误: Appid:%s, Appkey:%s, appid, appkey)}//fmt.Println(authenticated succ appid - appkey)resp : new(hello.HelloResponse)resp.Message fmt.Sprintf(Hello %s \nToken info: Appid%s, AppKey%s, req.Name, appid, appkey)return resp, nil }func main() {ls, err : net.Listen(tcp, Addr)if err ! nil {fmt.Println(err)return}//TLS认证cert, err : credentials.NewServerTLSFromFile(..\\..\\key\\server.pem, ..\\..\\key\\server_private.key)if err ! nil {fmt.Println(err)return}//新建一个grpc服务器并开启TLS认证server : grpc.NewServer(grpc.Creds(cert))//注册HelloServicehello.RegisterHelloServer(server, HelloService)fmt.Println(Listen on Addr with TLS)server.Serve(ls) }演示  成功  失败 补充         google.golang.org/grpc/credentials/oauth 包已实现了用于 Google API 的 oauth 和 jwt 验证 的方法使用方法可以参考 官方文档 。在实际应用中我们可以根据自己的业务需求实现合适的验证方 式。
http://www.w-s-a.com/news/967660/

相关文章:

  • 公司网站建设功能介绍室内设计学习
  • 做网站策划容易遇到哪些问题沈阳公司网站制作
  • 做php网站都用框架吗网站备案当面核验拍摄照片
  • 泉州企业自助建站兰州最好的互联网公司
  • 监察部门网站建设方案网站seo技术教程
  • 个人网站制作源代码下载品牌建设部
  • 网站备案需要准备什么文创产品设计思路
  • 网站开发书籍推荐青岛城阳新闻最新消息
  • 秦皇岛网站建设服务聊城做网站的公司资讯
  • 30岁转行做网站设计丰涵网站建设
  • 山东省和住房建设厅网站首页开发商不按时交房可以退房吗
  • asp网站怎么做404页面跳转本地南通网站建设
  • 点击网站出现微信二维码的链接怎么做申请网站空间怎么做
  • 网站开发的论文题目广告设计排行榜
  • 网络营销网站 功能南京h5制作公司
  • 做网站的费用的会计分录合肥做网站推广哪家好
  • 电子商城网站开发怎么wordpress用的什么主题
  • 榆林电商网站建设网上做试卷的网站
  • 文山网站建设代理中公教育培训机构官网
  • 郑州it培训机构有哪些上海外贸网站seo
  • dw做网站的实用特效广东住房与城乡建设厅网站
  • 模板网站 动易哪方面的网站
  • 怎么给网站做外链邵连虎郑州做网页的公司
  • 重庆网站开发哪家好宁波网站建设caiyiduo
  • 手机网站建设价格手机网站模版更换技巧
  • 哈尔滨松北区建设局网站美妆网站建设
  • 不需要网站备案的空间网站推广的基本方法是哪四个
  • 如何检查网站死链劳动仲裁院内部网站建设
  • 江西省住房和城乡建设网站合同管理系统
  • 网站建设质量保证福州网络推广