gRPC之实现TLS通信加密_已设置图床

news2024/11/25 13:04:23

gRPC之实现TLS通信加密

"crypto/tls"包

“crypto/tls” 是 Go 编程语言中的一个包,用于实现 TLS(传输层安全)协议。TLS 协议用于加密和保护网络通信,通常用于保护敏感数据的传输,如密码、支付信息等。在 Go 语言中,“crypto/tls” 包提供了实现 TLS 协议所需的功能,开发者可以使用这个包来创建安全的网络连接。

实例

func main() {
    flag.Parse()
    fmt.Printf("server starting on port %d...\n", *port)
    /*
          cert, err := ...:这行代码声明了两个变量 cert 和 err,并使用 := 运算符初始化它们。这意味着它在加载证书和密钥对后会分别接收这两个值。

        tls.LoadX509KeyPair(...):这是一个TLS包中的函数,用于加载X.509证书和私钥对。X.509是一种公钥基础设施(PKI)标准,用于数字证书的格式。

        data.Path("x509/server_cert.pem") 和 data.Path("x509/server_key.pem"):这两个参数是证书文件和私钥文件的路径。它们使用了一个函数 data.Path() 来获取文件路径,这个函数可能是在代码的其他地方定义的,用于获取文件的实际路径。

        总结一下,这行代码的作用是从指定的文件路径加载服务器端的X.509证书和私钥对,这些证书和密钥对将用于服务器端的安全通信,以确保通信的机密性和完整性。如果加载成功,cert 变量将包含证书和私钥对的信息,否则 err 变量将包含加载过程中的错误信息。这是建立安全gRPC服务器连接所必需的步骤之一。
    */
    cert, err := tls.LoadX509KeyPair(data.Path("x509/server_cert.pem"), data.Path("x509/server_key.pem"))
    if err != nil {
        log.Fatalf("failed to load key pair: %s", err)
    }
    opts := []grpc.ServerOption{
        // 下面的 grpc.ServerOption 为所有一元RPC添加了一个拦截器。
        // 若要为流式RPC配置拦截器,请参见:
        // https://godoc.org/google.golang.org/grpc#StreamInterceptor
        grpc.UnaryInterceptor(ensureValidToken),
        // 为所有传入连接启用TLS。
        grpc.Creds(credentials.NewServerTLSFromCert(&cert)),
    }
    s := grpc.NewServer(opts...)
    pb.RegisterEchoServer(s, &ecServer{})
    lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))
    if err != nil {
        log.Fatalf("failed to listen: %v", err)
    }
    if err := s.Serve(lis); err != nil {
        log.Fatalf("failed to serve: %v", err)
    }
}

思维导图

Image1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1038481.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

详解--计算机存储相关(寄存器、CPU Cache、内存、外存)

CPU寄存器、高速缓冲存储器、主存储器、外存储器 1. 主存储器 参考链接–主存 参考链接–内存 主存储器简称 主存,又称 内存储器(简称 内存)。作用 暂时存放CPU中的运算数据。存放指令和数据,并能由中央处理器(CPU&a…

什么是Service Worker?它在PWA中的作用是什么?

聚沙成塔每天进步一点点 ⭐ 专栏简介⭐ Service Worker的作用是什么?⭐ 写在最后 ⭐ 专栏简介 前端入门之旅:探索Web开发的奇妙世界 欢迎来到前端入门之旅!感兴趣的可以订阅本专栏哦!这个专栏是为那些对Web开发感兴趣、刚刚踏入前…

1066 二级C语言-自定义函数

输入一个正数x和一个正整数n,求下列算式的值。要求定义两个调用函数: (1)fact(n)计算n的阶乘; (2)mypow(x,n)计算x的n次幂(即xn),两个函数的返回值类型是do…

HEC-HMS和HEC-RAS水文模型、防洪评价报告编制及洪水建模、洪水危险性评价等相关案例解析

► HEC-RAS一维、二维建模方法及应用 【目标】: 1.掌握一维数学模型基本地形导入方法 2.掌握恒定流、非恒定流一维数学模型水流计算方法 3.掌握一维数学模型计算结果分析,水面线成果分析及调试;流速分布图输出方法 4.掌握一维数学模型增设构…

如何让一个uniform variable在多级shader中都起作用(类似C语言的全局变量)?

GLSL编程中通常设计多个shader,如vertex shader, fragment shader等等。在最近的某个项目中,我需要定义一个变量,该变量类似C语言中的全局变量,要同时在两个shader中都起作用。c - OpenGL Uniform Across Multiple Shaders - Stac…

2023-9-23 区间选点

题目链接&#xff1a;区间选点 #include <iostream> #include <algorithm>using namespace std;const int N 100010;int n;struct Range {int l, r;bool operator< (const Range &W) const{return r < W.r;} }range[N];int main() {scanf("%d"…

MyBatisPlus + ShardingJDBC 批量插入不返回主键ID

本文讲述一个由 ShardingJDBC 使用不当引起的悲惨故事。 一. 问题重现 有一天运营反馈我们部分订单状态和第三方订单状态无法同步。 根据现象找到了不能同步订单状态是因为 order 表的 thirdOrderId 为空导致的&#xff0c;但是这个字段为啥为空&#xff0c;排查过程比较波折…

NebulaGraph实战:2-NebulaGraph手工和Python操作

图数据库是专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点&#xff08;Vertex&#xff09;和边&#xff08;Edge&#xff09;&#xff0c;还可以将属性&#xff08;Property&#xff09;附加到点和边上。本文以示例数据集basketballplayer为例…

java的Map和Set集合

Set集合 一.HashSet HashSet 元素是无序的 向Hashset中添加元素时&#xff0c;是如何判断元素是否重复的: 添加元素时&#xff0c;如果用equals判断效率太低&#xff0c;因为equals是一个一个字符比较 HashSet底层用到hashCode和equals 一个内容&#xff1a;"sahdihwo&q…

FPGA 安装Quartus 13.1无法生成.sof文件

FPGA 安装Quartus 13.1无法生成.sof文件 安装环境编译无法生成 .sof文件分析原因 找资料1.第1篇文章2.第2篇文章 安装环境 Quarter II 13.0下载、安装、破解包括可能出现的几乎所有的问题详解野火FPGA安装视频 编译无法生成 .sof文件 分析原因 1.推测可能是破解失败。2.安装…

洛谷bfs题2---P1825 [USACO11OPEN] Corn Maze S

P1825 [USACO11OPEN] Corn Maze S import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {public static int N;//行public static int M;//列public static Queue<Integer> q new LinkedList<>();public static in…

变量、因子、缺失值、类型转换、剔除多余变量、随机抽样、用R使用SQL、trim、na.rm=TRUE、数据标准化应用

变量&#xff1a;名义型、有序型、连续型变量 名义型&#xff1a;普通事件类型&#xff0c;如糖尿病I型和糖尿病II型。 有序型&#xff1a;有顺序的事件类型&#xff0c;如一年级、二年级和三年级。 连续型&#xff1a;表示有顺序的数量&#xff0c;如年龄。 因子&#xff1a;…

现代架构设计:构建可伸缩、高性能的系统

文章目录 架构设计的基本原则1. 可伸缩性2. 可用性和容错性3. 性能4. 安全性5. 简单性 现代架构设计的关键概念1. 微服务架构2. 容器化3. 云原生4. 自动化和持续集成/持续交付&#xff08;CI/CD&#xff09; 构建可伸缩、高性能的系统的最佳实践1. 合理使用缓存2. 负载均衡3. 弹…

在Python中处理CSV文件的常见问题

当谈到数据处理和分析时&#xff0c;CSV&#xff08;Comma-Separated Values&#xff09;文件是一种非常常见的数据格式。它简单易懂&#xff0c;可以被绝大多数编程语言和工具轻松处理。在Python中&#xff0c;我们可以使用各种库和技巧来处理CSV文件&#xff0c;让我们一起来…

Server2101

B-1:数据库服务渗透测试 任务环境说明: 服务器场景:Server2101 服务器场景操作系统:未知(关闭连接) 1.通过分析靶机Server2101页面信息,寻找漏洞页面,将WEB服务存在SQL注入漏洞的页面名称作为Flag提交; nmap -p- 扫描发现靶机80和443端口有http、https服务 访问网站…

Nginx访问认证

访问认证 有时候&#xff0c;我们⼀些站点内容想要进⾏授权查看&#xff0c;只能输⼊账号密码之后才能访问&#xff0c;例如⼀些重要的内⽹平台&#xff0c;CRM &#xff0c; CMDB &#xff0c;企业内部 WIKI 等等。 htpasswd是Apache密码⽣成⼯具&#xff0c;Nginx⽀持auth_ba…

多卫星定位算法

多卫星定位算法 现已知有N(N>4)个卫星&#xff0c;每个卫星的坐标用 X s {X_s} Xs​表示&#xff0c;其对应的伪距用 r r r表示。 由于伪距不是准确的、真实的距离&#xff0c;它有所干扰。所以我们可以再根据三维空间中的距离公式&#xff0c;另外估计卫星和用户的距离为 …

Visual Studio Cpp CLR C# 替换

1、首先将文件中所有都替换 你需要的名字 替换为整个解决方案 2、新建工程取名 Laserbeam_upper 3、把原工程下的cpp放进来&#xff0c;并改名Laserbeam_upper 4、在这里逐步添加 属性表配置opencv 5、cpp需要修改的两个地方 6、CLR新建和添加 选类库新建、然后直接粘贴进来…

Learn Prompt-Prompt 高级技巧:API-Bank AgentBench

模型评估是Agent学习过程中至关重要的一环。通过分析数据来评估Agent的能力&#xff0c;可以客观地衡量它在特定任务或领域中的表现。数据评估是不断迭代和改进的基础。通过反复评估和分析数据&#xff0c;Agent可以逐步改进自身&#xff0c;并不断优化其能力。数据评估还可以将…

浅谈为什么多态只能是指针或引用

其实在很早之前&#xff0c;我一直没有注意到这个问题&#xff0c;直到今天碰见了一道题&#xff0c;顺便前面的博客中&#xff0c;继承写到&#xff0c;子类中不包含父类&#xff0c;子类只是继承了父类的成员变量和函数&#xff0c;由这一点&#xff0c;引发了我对切片以及赋…