关于c++ grpc 和 c# grpc 通信的问题 以及 grpc 认证问题
一、c++ 和 c# 通信
c# 端服务器 如果域名 输入的是 https ,则 c++ 端需要匹配使用,也就是c++ 端需要进行安全认证。如果是http 则c++ 端不需要认证(基于c#的grpc 未 通信成功)
参考如下网址可以写一个简单的 .net grpc服务器 (无论是https 还是 http 都通信成功),工程中的launchSettings.json 可设置监听的域名与端口,


二、.net 知识
在运行 .NET Core 应用程序时,提示使用 SSL(即 HTTPS),通常情况下,.NET Core 可以生成自签名证书来简化开发和测试过程。以下是一些常见的情况和配置:
自签名证书生成
在开发环境中,.NET Core SDK 会自动生成自签名证书,以便于使用 HTTPS。这些证书通常会在本地的开发环境中创建,并由 ASP.NET Core 自带的开发证书工具 (dotnet dev-certs) 进行管理。你可以通过以下命令生成或管理这些证书:
dotnet dev-certs https –trust
这个命令会生成一个自签名证书并将其标记为受信任,适用于本地开发和测试。
在生产环境中的证书
在生产环境中,通常需要使用由受信任的证书颁发机构(CA)签发的证书。你需要从 CA 处获得证书,并将其配置到你的 Web 服务器中(如 Kestrel、IIS、NGINX 等)。
总结
- 开发环境:.NET Core SDK 会自动生成并管理自签名证书。
- 生产环境:你需要从受信任的 CA 获得证书,并在 Web 服务器中配置它。
确保在生产环境中使用正确的证书和配置,以确保安全性。

在 开发 c++ grpc 客户端 与 c# 服务端时 ,c# 程序就是默认使用的 https , 所以c++ 客户端需要如果需要连接的话,,就必须使用认证,,需要一个证书
根据上述截图的 dotnet dev-certs https -ep ./certificate.crt --trust --format PEM 可导出证书文件。
三、c++ grpc 客户端认证。。只需要输入认证文件就可以了
//客户端应用
void EventClientTest()
{
//读文件auto ReadFile = [](const std::string& filename) {std::ifstream file(filename);if (!file.is_open()) {throw std::runtime_error("Unable to open file: " + filename);}return std::string((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());};// 配置 SSL 证书grpc::SslCredentialsOptions ssl_opts;//ssl_opts.pem_root_certs = ReadFile("certificate.crt"); // 服务器证书ssl_opts.pem_root_certs = ReadFile("server.crt"); // 服务器证书auto creds = grpc::SslCredentials(ssl_opts);// 创建 SSL 凭据auto credentials = grpc::SslCredentials(ssl_opts);//创建 grpc 通道EventClient enent(grpc::CreateChannel("localhost:6001", credentials));//不认证的方式
// EventClient enent(grpc::CreateChannel(
// "localhost:6001", grpc::InsecureChannelCredentials()));
// std::string user("world");// std::string reply = enent.Dispatch(user);
// qDebug() << "Greeter received: " << reply.c_str();//rpc 调用enent.SubDispatch();
}
四、c++ grpc 服务端
需要自己使用openssl 工具生成 证书,
生成 key:
openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:2048
生成证书:CN 是域名。。:
openssl req -new -x509 -key server.key -out server.crt -days 365 -subj "/CN=localhost"
试了 该域名支持服务器ip 为 localhost 和 0.0.0.0 的连接
void GrpcServer::serverWait()
{std::string server_address = absl::StrFormat("%s:%d", m_ip, m_port);grpc::EnableDefaultHealthCheckService(true);grpc::reflection::InitProtoReflectionServerBuilderPlugin();//读文件auto ReadFile = [](const std::string& filename) {std::ifstream file(filename);if (!file.is_open()) {throw std::runtime_error("Unable to open file: " + filename);}return std::string((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());};//服务端则需要两个,一个是密钥,一个认证文件std::string server_cert = ReadFile("./server.crt");std::string server_key = ReadFile("./server.key");std::string ca_cert = ""; //ca 认证文件是需要向机构申请的,自用不需要// 设置服务器证书grpc::SslServerCredentialsOptions::PemKeyCertPair key_cert_pair;key_cert_pair.private_key = server_key;key_cert_pair.cert_chain = server_cert;grpc::SslServerCredentialsOptions ssl_opts;ssl_opts.pem_key_cert_pairs.push_back(key_cert_pair);ssl_opts.pem_root_certs = ca_cert;// 创建服务器凭证auto server_creds = grpc::SslServerCredentials(ssl_opts);ServerBuilder builder;// Listen on the given address without any authentication mechanism.builder.AddListeningPort(server_address, server_creds);// Register "service" as the instance through which we'll communicate with// clients. In this case it corresponds to an *synchronous* service.for(auto service : m_listService){builder.RegisterService(service.get());}// Finally assemble the server.m_server = builder.BuildAndStart();qCritical() << "Server listening on " << server_address.c_str();// Wait for the server to shutdown. Note that some other thread must be// responsible for shutting down the server for this call to ever return.m_server->Wait();
}
相关文章:
关于c++ grpc 和 c# grpc 通信的问题 以及 grpc 认证问题
一、c 和 c# 通信 c# 端服务器 如果域名 输入的是 https ,则 c 端需要匹配使用,也就是c 端需要进行安全认证。如果是http 则c 端不需要认证(基于c#的grpc 未 通信成功) 参考如下网址可以写一个简单的 .net grpc服务器 (…...
C++进阶(14)类型转换、IO流
文章目录 一、类型转换C语言隐式类型转换强制类型转换 C类型转换的情况类型转换的函数(4个) 二、IO流1、缓冲区2、提高输入输出效率3、文件操作文件权限写操作 --- ofstream文本方式写入二进制方式写入 读操作 --- ifstream文本方式读取二进制方式读取 其…...
配置oss cdn加速静态资源访问 阿里云
效果对比 配置cdn下载速度对比 步骤 1: 登录阿里云控制台控制台主页,找到并点击“对象存储 OSS” 创建存储空间(Bucket) 设置权限 步骤 2: 获取外网访问地址 步骤 3 在 CDN 中使用该地址 复制该外网访问地址 打开全站加速 DCDN/域名管理 添…...
实现 前端框架 SPA 路由功能:Hash 模式与 History 模式的手动实现
前言 在前端框架(如 Vue.js、React 等)中,路由管理通常会配置一个 router 对象来定义 URL 路径与组件的映射关系。 路径(path): 这是浏览器 URL 的一部分,比如 /home 或 /about。组件(compone…...
去中心化的新时代:Web3技术的全球影响
随着技术的不断演进,Web3正引领互联网的去中心化新时代。相较于传统的Web1和Web2,Web3通过去中心化、区块链和智能合约等技术,正在重塑网络的运作方式。这一变革不仅提升了网络的安全性和透明度,也对全球经济、社会和文化产生了深…...
初始redis:List
列表 List 相当于数组或者顺序表。 对于List来说,两侧都可以插入和删除,时间复杂度是O(1)。 有很多的操作,比如 llen 可以获取List的长度,lrem 可以删除元素 ,lrange可以去一个字符串 , lindex可以根据下标…...
Java | Leetcode Java题解之第355题设计推特
题目: 题解: class Twitter {private class Node {// 哈希表存储关注人的 IdSet<Integer> followee;// 用链表存储 tweetIdLinkedList<Integer> tweet;Node() {followee new HashSet<Integer>();tweet new LinkedList<Integer&g…...
MVC与三层架构分层
1. 应用分层 应用分层类似公司的组织架构。我们进行项目开发时,最开始功能简单,前后端放在一起开发,但随着项目功能的复杂,项目会被前端和后端不同的团队接手,甚至更细粒度的团队。甚至后端开发也会根据功能再进行细分…...
Go语言基础--switch
在Go语言中,switch语句是一种非常强大的控制流结构,它允许一个变量的值与多个case进行比较,并根据匹配的结果执行不同的代码块。与C、C或Java中的switch不同,Go语言的switch更灵活,支持没有显式条件的switch࿰…...
【数字ic自整资料】AXI握手协议及outstanding
参考资料: ic基础|时序篇:握手协议valid和ready的时序优化_valid和ready握手信号-CSDN博客 https://zhuanlan.zhihu.com/p/365573848 1、AXI握手协议 当我们遇到时序违例时,通常采用的方式为插入寄存器(打拍)或者是…...
C++ //练习 18.13 什么时候应该使用未命名的命名空间?
C Primer(第5版) 练习 18.13 练习 18.13 什么时候应该使用未命名的命名空间? 环境:Linux Ubuntu(云服务器) 工具:vim 解释 当需要将实体限定在特定文件中,并且不会作用于不同文件…...
yum小bug
这个错误是在克隆的机子上安装mysql时,查看有无mysql发现的 [rootwebserve-2 backup] # yum list installed | grep mysql Repository cr is listed more than once in the configuration Repository fasttrack is listed more than once in the configuration 这…...
GDB的基本使用
我有话说 因为时间和精力原因,本文写的虎头蛇尾了,除了启动调试与程序执行以外只有少量截图演示,只是简单的说明。如果有需要可以联系我,我有时间的话会把演示补上,谢谢理解。 启动调试与程序执行 启动调试并传递参数…...
如何利用AI创作高质量的文章
讯飞星火 利用AI创作高质量的文章需要遵循以下步骤: 确定主题和目标受众:在开始写作之前,明确文章的主题和目标受众。这将帮助你确定文章的风格、结构和内容。 收集资料和信息:在撰写文章之前,进行充分的研究&#x…...
开源的量化交易领域平台vn.py(VeighNa)
一:vn.py(VeighNa)下的工具以及社区版和Elite版的区别 vn.py是一款广泛应用于量化交易领域的开源软件,它主要有以下用途和功能: 1. 交易系统开发框架:vn.py提供了一个完整的交易系统开发框架,可…...
选择搜索引擎进行搜索
<!DOCTYPE html> <html> <head><meta charset"utf-8"><title>选择搜索引擎进行搜索</title><script>function searchSelectedEngine() {var keyword document.getElementById(keyword).value;var engine document.getEl…...
安卓framework修改density
安卓平台,不同屏幕分辨率需要修改density值,以适配UI显示,比如字体大小等. 命令行下进入安卓SDK源码的device/目录 再根据不同芯片厂进入不同目录, 比如展锐就是 cd device/sprd, 高通是device/qcom/搜索关键字"ro.sf.lcd_density", grep -nr “ro.sf.lcd_density”…...
我们如何将数据输入到神经网络中?
前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 下面我拿识别美女的例子来给大家介绍如何将美女的图片数据输入到神经网络中。 此例中,待输入的数据是一张图像。为了存储图像…...
基于python模板的药品名称识别系统设计与实现
博主介绍: 大家好,本人精通Java、Python、C#、C、C编程语言,同时也熟练掌握微信小程序、Php和Android等技术,能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验,能够为学生提供各类…...
【第五节】Win32汇编程序设计
目录 一、汇编的第一个“helloworld” 二、汇编中的标号 三、的使用 四、数据定义 五、全局变量 六、局部变量 七、结构体 八、结构体的访问 九、获取变量地址 十、函数 十一、分支与循环 十二、内联汇编 十三、裸函数的使用 一、汇编的第一个“helloworld” .38…...
别再只盯着wx.login了!SpringBoot后端实战:用getPhoneNumber接口搞定小程序用户手机号绑定
微信小程序用户手机号绑定:SpringBoot后端深度实践指南 在当今移动互联网生态中,微信小程序已成为连接用户与服务的重要桥梁。对于需要强实名认证或直接触达用户的业务场景(如电商交易、金融服务、政务办理等),仅依赖w…...
2019 年旧作升级!用木材与电路打造更美观的电压表时钟
2019 年旧作升级!用木材与电路打造更美观的电压表时钟早在 2019 年,作者制作了一个简单的电压表时钟,这类时钟使用模拟面板电压表来显示时间,而非传统钟面。不过,网上大多数此类设计过于复杂且不太美观,于是…...
5分钟免费获取:开源鼠标连点器MouseClick完整使用指南
5分钟免费获取:开源鼠标连点器MouseClick完整使用指南 【免费下载链接】MouseClick 🖱️ MouseClick 🖱️ 是一款功能强大的鼠标连点器和管理工具,采用 QT Widget 开发 ,具备跨平台兼容性 。软件界面美观 ,…...
移动端AI助手开发实战:混合架构、模型部署与性能优化
1. 项目概述:一个移动端AI助手的诞生 最近在移动端AI应用开发圈子里,一个名为 copaw-mobile 的项目开始引起不少同行的注意。这个由 xmingai 团队开源的项目,定位非常清晰——它要做的,就是将一个功能强大的AI助手,…...
如何3分钟快速上手企业级后台管理系统:终极配置秘籍
如何3分钟快速上手企业级后台管理系统:终极配置秘籍 【免费下载链接】ant-design-vue3-admin 一个基于 Vite2 Vue3 Typescript tsx Ant Design Vue 的后台管理系统模板,支持响应式布局,在 PC、平板和手机上均可使用 项目地址: https://…...
揭秘Midjourney“树胶重铬酸盐”风格指令:3步精准触发古典印相质感,92%用户从未用对的隐藏参数组合
更多请点击: https://intelliparadigm.com 第一章:树胶重铬酸盐工艺的光学原理与数字映射本质 树胶重铬酸盐(Gum Bichromate)工艺是19世纪末发展起来的经典光敏印相技术,其核心光学原理基于重铬酸盐在紫外光照射下发生…...
AI Agent架构深度解析:从核心原理到工程实践
1. 项目概述:一次关于AI Agent的深度技术探险最近在GitHub上看到一个名为“tvytlx/ai-agent-deep-dive”的项目,光看标题就让人眼前一亮。这显然不是一个简单的“Hello World”式教程,而是一次对AI Agent(智能体)技术的…...
智谱AI GLM-5V-Turbo:视觉生成代码的技术革命与实战架构
摘要:2026年5月,智谱AI联合清华大学发布了GLM-5V-Turbo多模态编程基座模型,在Design2Code基准测试中以94.8分的成绩超越Claude Opus的77.3分,实现了从"文本生成代码"到"视觉生成代码"的范式跃迁。本文深入解析该模型的核心技术架构——CogViT视觉编码器…...
碳排放混合时间窗集装箱运输调度【附算法】
✨ 长期致力于集装箱运输VRP、混合时间窗、碳排放、多目标优化、NSGA-Ⅱ、蚁群算法研究工作,擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)经济性与紧急性双目…...
基于双线性插值的AMG8833热成像分辨率提升方案与嵌入式实现
1. 项目概述:从8x8到15x15,一次软件驱动的热成像分辨率革命如果你玩过基于AMG8833这类低成本红外热成像传感器的项目,大概率会对它那8x8的“马赛克”图像印象深刻——64个像素点,勉强能看出个温度轮廓,但细节ÿ…...
