IceRPC之服务器地址与TLS的安全性->快乐的RPC
作者引言
很高兴啊,我们来到了IceRPC之服务器地址与TLS的安全性->快乐的RPC, 基础引导,让自已不在迷茫,快乐的畅游世界。
服务器地址 ServerAddress
了解服务器地址的概念和语法。
语法
服务器地址URI具有以下语法: protocol://host[:port][?name=value][&name=value...]
protocol协议 (URI方案),目前支持ice或icerpchostDNS 名称 或 IP 地址port端口号; 未指定时,默认端口为 4061ice和 4062icerpc
服务器地址 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 - 传输功能
Ice 和 icerpc 协议既安全也并非不安全,因为使用 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传输意味着普通tcp或tcp+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的更多相关文章
- DNS服务器地址汇总
		
如果修改DNS服务器地址就可以访问google等服务,你还等什么?使用免费DNS解析服务除了去掉了运营商的各种广告,还有个最大的好处就是不会重定向或者过滤用户所访问的地址,这样就防止了很多网站被电信. ...
 - 在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认 ...
 - 最新可靠好用的DNS服务器地址汇总
		
如果修改DNS服务器地址就可以访问google等服务,你还等什么?使用免费DNS解析服务除了去掉了运营商的各种广告,还有个最大的好处就是不会重定向或者过滤用户所访问的地址,这样就防止了很多网站被电信. ...
 - 微信公众号开发(一)--验证服务器地址的Java实现
		
现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...
 - svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录
		
svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...
 - 中国能用的NTP服务器地址
		
133.100.11.8 prefer210.72.145.44203.117.180.36131.107.1.10time.asia.apple.com64.236.96.53130.149.17. ...
 - Mac 以太网连接 报无效的服务器地址 BasicIPv6ValidationError
		
Mac 以太网连接 报无效的服务器地址 BasicIPv6ValidationError 用Mac这么久,一直是用WiFi连接网络,没搞过以太网连接,我也是醉了 显然 Mac 不能像 Windows ...
 - 国内常用NTP服务器地址及IP
		
iptables实现80端口转发到8080端口上 iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 ...
 - 全国各地电信DNS服务器地址
		
全国各地电信DNS服务器地址 北京DNS地址:202.96.199.133 202.96.0.133 202.106.0.20 202.106.148.1 202.97.16.195 上海DNS地址: ...
 - NTP服务器地址及IP
		
yum install ntp */20 * * * * /usr/sbin/ntpdate 61.172.254.29 210.72.145.44 (国家授时中心服务器IP地址)133.100.11 ...
 
随机推荐
- #搜索,计算几何#JZOJ 4016 圈地为王
			
题目 在\(n\)行\(m\)列的网格中,你要圈一些地. 你从左上角出发,最后返回左上角,路径内部的区域视为被你圈住. 你不可以进入网格内部, 只能在边上行走. 你的路径不能在左上角以外自交, 但是边 ...
 - Jetty的http3模块
			
启用http3模块,执行如下命令: java -jar $JETTY_HOME/start.jar --add-modules=http3 命令的输出,如下: ALERT: There are ena ...
 - JDK11的新特性:HTTP API和reactive streams
			
目录 简介 怎么在java中使用reactive streams POST请求的例子 总结 JDK11的新特性:HTTP API和reactive streams 简介 在JDK11的新特性:新的HT ...
 - vue-cli4,vue3打包后页面无内容
			
这个问题百度了一下,各种各样的的回答都有,试了好多种方法,终于解决这个问题 解决方法: 1.在项目根目录下,新建 vue.config.js, 在文件中输入: module.exports = { ...
 - 重新点亮linux 命令树————网络管理[十一二]
			
前言 简单整理一下网络管理. 正文 网络管理需要掌握: 网络状态查看 网络配置 路由命令 网络故障排除 网络服务管理 常用网络配置文件 网络状态的查看: 1.net-tools ---->1.i ...
 - 重新整理数据结构与算法(c#)—— 线索化二叉树[二十]
			
前言 为什么会有线索化二叉树呢? 是这样子的,二叉树呢,比如有n个节点,那么就有n+1个空指针域. 这个是怎么来的呢?比如我们假如一个节点都有左子树和右子树,那么就有2n个节点. 但是我们发现连接我们 ...
 - Effective Python:简介
			
作者:布雷特·斯拉特金 本书的大部分范例代码都遵循Python 3.7版本的语法规范,Python 3.7发布于2018年6月.另外,书里还会给出一些采用Python 3.8语法规范所写的范例,让大家 ...
 - https http2 http3
			
HTTP 1.1 对比 1.0,HTTP 1.1 主要区别主要体现在: 缓存处理:在 HTTP 1.0 中主要使用 header 里的 If-Modified-Since,Expires 来做为缓存判 ...
 - SELECT...FROM 表 a,( SELECT...FROM...WHERE...) tc...的一些注意以及多字段之间的模糊查询
			
将sql查询结果作为一个表来查询的时候的一些注意事项 因为工作,发现了这种sql的写法,但是有的时候感觉并不是自己想要的结果,自己试着玩了属于是 简单来说,这个查询并不是拼接结果的,而是将结果按照一个 ...
 - CF1913C Game with Multiset 题解
			
[题目描述] 你有一个空的多重集,你需要处理若干下列询问: ADD $ x $:加入一个数值为 $ 2^x $ 的元素到该多重集. GET $ w $:判断是否存在一个该多重集的子集,使得这个子集的所 ...