作者引言

很高兴啊,我们来到了IceRPC之服务器地址与TLS的安全性->快乐的RPC, 基础引导,让自已不在迷茫,快乐的畅游世界。

服务器地址 ServerAddress

了解服务器地址的概念和语法。

语法

服务器地址URI具有以下语法: protocol://host[:port][?name=value][&name=value...]

  • protocol 协议 (URI方案),目前支持 iceicerpc
  • host DNS 名称 或 IP 地址
  • port 端口号; 未指定时,默认端口为 4061 ice 和 4062 icerpc

服务器地址 URI 必须具有空路径且没有片段。它可以有查询参数,这些参数通常是特定于传输的。

查询参数传输 transport 指定底层传输的名称。大多数应用程序使用单个传输,并将此传输配置作为它们可以使用的唯一传输。 因此,在服务器地址中省略传输transport是很常见的。

C# 中,结构体 ServerAddress 是服务器地址 URI 的解析和验证,用于保存URI信息等。

客户端连接配置

客户端连接的主要配置是服务器的地址。 它告诉客户端连接如何到达服务器。DNS 名称在这些服务器地址中是很常见的。

例如:

服务器地址 说明
icerpc://hello.zeroc.com 使用 icerpc 协议连接到端口 4062 上的 hello.zeroc.com , 未指定底层传输。
icerpc://192.168.100.10:10000?transport=quic 使用 QUIC 上的 icerpc 协议,连接端口 10000 上的 192.168.100.10 Ip地址
ice://hello.zeroc.com 使用 ice 协议连接端口 4061 上的 hello.zeroc.com 地址

服务器配置

指定构建服务器时,要监听的服务器地址。

如果不指定服务器地址,默认值为 icerpc://[::0],这意味着,监听默认 icerpc 端口 (4062) 上所有接口上的 icerpc 连接。

构建服务器时,服务器地址的主机必须是[::0]这样的通配符ip地址,或者是当前系统上特定接口的ip地址。

如果端口号指定 0,操作系统将自动分配其短暂范围内的端口号。因为服务器不会监听 tcp 或 udp 端口 0。

以下是一些示例:

服务器地址 说明
icerpc://192.168.100.10 使用默认 icerpc 端口 4062,监听与 192.168.100.10 关联的接口上的 icerpc 连接。
icerpc://[::0]:0 监听所有接口上的 icerpc 连接;操作系统自动选择要使用的端口号。
ice://0.0.0.0:10000 10000 端口上 IPv4 地址的所有接口上监听 ice 连接。

C# 中, 当在服务器地址中指定端口 0 时, Listen 会返回一个服务器地址, 其中包含 OS 选择的端口号;

using IceRpc;

await using var server = new Server(...,new Uri("icerpc://[::1]:0"));
ServerAddress actualServerAddress = server.Listen();
Console.WriteLine($"server is now listening on {actualServerAddress}"); // shows actual port
// then somehow share this server address with the clients

TLS 的安全性

了解如何使用TLS保护连接

TLS - 传输功能

Iceicerpc 协议既安全也并非不安全,因为使用 TLS 保护通信,是底层传输的责任。

icerpc 协议没有类似https"s"变化,也没有用于安全 icerpc 连接的独特安全端口。 当看到服务器地址 icerpc://hello.zeroc.com 时, 可以看到服务器正在监听默认的 icerpc 端口,但无法判断连接到该服务器的连接,将使用哪种传输,以及该传输是否使用了 TLS

Quic

Quic 传输协议,始终是安全的。 如果将客户端连接配置为使用 Quic,则该连接将使用 TLS

例如:

// Always uses TLS.
await using var connection = new ClientConnection(
"icerpc://hello.zeroc.com",
multiplexedClientTransport: new QuicClientTransport());

同样的逻辑也适用于服务器:如果将服务器配置为使用 Quic,则该服务器接受的任何连接都将使用 TLS

在 C# 中,需要为任何使用 Quic 的服务器指定 TLS 配置,特别是 X.509 证书。

例如:

// SslServerAuthenticationOptions is required with QuicServerTransport.
await using var server = new Server(
new Chatbot(),
new SslServerAuthenticationOptions
{
ServerCertificate = new X509Certificate2("server.p12")
},
multiplexedServerTransport: new QuicServerTransport());

Tcp

Tcp 传输可以使用,也可以不使用 TLS。如果在为 Tcp 创建客户端连接时指定 TLS 配置,则该连接将使用 TLS。如果不指定 TLS 配置,连接将不会使用 TLS

在 C# 中,该客户端 TLS 配置由 SslClientAuthenticationOptions 参数提供。例如:

// The default multiplexed transport for icerpc is tcp (implemented by SlicClientTransport over TcpClientTransport).
// This connection does not use TLS since we don't pass a SslClientAuthenticationOptions parameter.
await using var plainTcpConnection = new ClientConnection("icerpc://hello.zeroc.com"); // We pass a non-null SslClientAuthenticationOptions so the connection uses TLS.
await using var secureTcpConnection = new ClientConnection(
"icerpc://hello.zeroc.com",
new SslClientAuthenticationOptions());

对于Tcp的服务器来说,是一样的。如果在创建此服务器时,指定 TLS 配置,则服务器将仅接受 TLS 保护的连接。 如果在创建此服务器时未指定 TLS 配置,则服务器将仅监听并接受简单的 tcp 连接。

SSL (限于ice)

Ice 服务器地址可以指定ssl传输,比如 ice://hello.zeroc.com?transport=ssl. 这种Ice特定的 ssl 传输与 tcp 传输相同,连接始终安全。在这方面,ssl 就像 quic

例如:

// Uses the default client transport, TcpClientTransport.
await using var connection = new ClientConnection("ice://hello.zeroc.com?transport=ssl");

相当于:

await using var connection = new ClientConnection(
"ice://hello.zeroc.com?transport=tcp",
new SslClientAuthenticationOptions());

ssl 传输仅用于向后兼容 Ice:Ice 应用程序请求安全连接的标准方式是使用具有 ssl 服务器地址的代理。

IceRPC + Slice 解码具有 ssl 服务器地址的服务地址时,ssl 传输捕获此信息("需要 TLS")并确保客户端在调用此服务地址时建立安全连接。

对于 Ice,tcp 传输意味着"不使用 TLS". 对于 IceRPC,tcp 传输意味着普通 tcptcp + tls,具体取决于 TLS 配置。

Icerpc 协议,客户端和服务器都必须有相同的 TLS 期望配置,并且带有 transport=tcp 的 icerpc 服务器地址,并不是指服务器都需要 TLS

coloc 传输

用于测试的 coloc 传输,不支持 TLS,如果使用 coloc 指定 TLS 配置,将收到错误。

// Does not work: can't get a TLS connection with a transport that doesn't support TLS.
await using var connection = new ClientConnection(
"icerpc://colochost",
new SslClientAuthenticationOptions()
multiplexedClientTransport: new SlicClientTransport(colocClientTransport));

作者结语

  • 一直做,不停做,才能提升速度
  • 翻译的不好,请手下留情,谢谢
  • 如果对我有点小兴趣,如可加我哦,一起探讨人生,探讨道的世界
  • 觉得还不错的话,点个

IceRPC之服务器地址与TLS的安全性->快乐的RPC的更多相关文章

  1. DNS服务器地址汇总

    如果修改DNS服务器地址就可以访问google等服务,你还等什么?使用免费DNS解析服务除了去掉了运营商的各种广告,还有个最大的好处就是不会重定向或者过滤用户所访问的地址,这样就防止了很多网站被电信. ...

  2. 在Windows服务器上启用TLS 1.2及TLS 1.2基本原理

    在Windows服务器上启用TLS 1.2及TLS 1.2基本原理 在Windows服务器上启用TLS 1.2及TLS 1.2基本原理 最近由于Chrome40不再支持SSL 3.0了,GOOGLE认 ...

  3. 最新可靠好用的DNS服务器地址汇总

    如果修改DNS服务器地址就可以访问google等服务,你还等什么?使用免费DNS解析服务除了去掉了运营商的各种广告,还有个最大的好处就是不会重定向或者过滤用户所访问的地址,这样就防止了很多网站被电信. ...

  4. 微信公众号开发(一)--验证服务器地址的Java实现

    现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...

  5. svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录

    svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...

  6. 中国能用的NTP服务器地址

    133.100.11.8 prefer210.72.145.44203.117.180.36131.107.1.10time.asia.apple.com64.236.96.53130.149.17. ...

  7. Mac 以太网连接 报无效的服务器地址 BasicIPv6ValidationError

    Mac 以太网连接 报无效的服务器地址 BasicIPv6ValidationError 用Mac这么久,一直是用WiFi连接网络,没搞过以太网连接,我也是醉了 显然 Mac 不能像 Windows ...

  8. 国内常用NTP服务器地址及IP

    iptables实现80端口转发到8080端口上 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 ...

  9. 全国各地电信DNS服务器地址

    全国各地电信DNS服务器地址 北京DNS地址:202.96.199.133 202.96.0.133 202.106.0.20 202.106.148.1 202.97.16.195 上海DNS地址: ...

  10. NTP服务器地址及IP

    yum install ntp */20 * * * * /usr/sbin/ntpdate 61.172.254.29 210.72.145.44 (国家授时中心服务器IP地址)133.100.11 ...

随机推荐

  1. #dp#洛谷 4158 [SCOI2009]粉刷匠

    题目 分析 首先每条木板可以分开处理,再合并起来求最大值 下面讲一下单独处理每条木板的情况 设\(dp[k][m]\)表示前\(m\)个格子粉刷了\(k\)次最多正确粉刷的格子数 那么 \[dp[k] ...

  2. 【直播回顾】OpenHarmony知识赋能五期第三课——多媒体整体介绍

    5月5日晚上19点,知识赋能第五期第三节课<OpenHarmony标准系统多媒体子系统整体介绍>,在OpenHarmony开发者成长计划社群内成功举行. 本期课程,由深开鸿资深技术专家郭岳 ...

  3. mysql迁移sqlServer和mybatisPlus下查询语句转换为SqlServer2008

    mysql数据迁移sqlServer2008 mybatisPlus下查询语句转换 一.mysql数据迁移到sqlServer2008中(包括数据结构和数据) 最近公司项目需要使用sqlServer以 ...

  4. 编译安装openGauss 3.0.0

    编译安装 openGauss 3.0.0 环境检查 1.1 检查 OS 版本 openGauss支持的操作系统: CentOS 7.6(x86 架构) openEuler-20.03-LTS(aarc ...

  5. HarmonyOS音频开发指导:使用AudioRenderer开发音频播放功能

      AudioRenderer是音频渲染器,用于播放PCM(Pulse Code Modulation)音频数据,相比AVPlayer而言,可以在输入前添加数据预处理,更适合有音频开发经验的开发者,以 ...

  6. 第十篇:异步IO、消息队列

    一.协程 二.异步IO_Gevent 三.协程异步IO操作 四.事件驱动模型 五.IO多路复用 六.异步IO理论 一.回顾 线程 vs 进程 线程:CPU最小调度单位,内存共享: 线程同时修改同一份数 ...

  7. k8s 深入篇———— k8s 的pod[五]

    前言 简单整理一下pod的相关知识. 正文 为什么我们需要pod. 前面我们知道了k8s一个最重要的作用是解决容器的编排功能,那么为什么有一个pod的东西. 这就是实际中遇到的问题. 那就是容器和容器 ...

  8. leetcode - 子数组最大平均值

    给定 n 个整数,找出平均数最大且长度为 k 的连续子数组,并输出该最大平均数. 示例: 输入:[1,12,-5,-6,50,3], k = 4 输出:12.75 解释:最大平均数 (12-5-6+5 ...

  9. 力扣620(MySQL)-有趣的电影(简单)

    题目: 某城市开了一家新的电影院,吸引了很多人过来看电影.该电影院特别注意用户体验,专门有个 LED显示板做电影推荐,上面公布着影评和相关电影描述. 作为该电影院的信息部主管,您需要编写一个 SQL查 ...

  10. 力扣12(java)-整数转罗马数字(中等)

    题目: 罗马数字包含以下七种字符:I, V, X, L, C, D, M 1 字符 数值 2 I 1 3 V 5 4 X 10 5 L 50 6 C 100 7 D 500 8 M 1000 例如, ...