作者引言 .Net 8.0 下的新RPC 很高兴啊,我们来到了IceRPC之服务器地址与TLS的安全性->快乐的RPC, 基础引导,让自已不在迷茫,快乐的畅游世界。 服务器地址 ServerAddress 了解服务器地址的概念和语法。 语法 服务器地址URI具有以下语法: protocol:/
.Net 8.0 下的新RPC
很高兴啊,我们来到了IceRPC之服务器地址与TLS的安全性->快乐的RPC, 基础引导,让自已不在迷茫,快乐的畅游世界。
ServerAddress
了解服务器地址的概念和语法。
服务器地址
URI
具有以下语法:
protocol://host[:port][?name=value][&name=value...]
protocol
协议 (URI方案),目前支持
ice
或
icerpc
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保护连接
Ice
和
icerpc
协议既安全也并非不安全,因为使用 TLS 保护通信,是底层传输的责任。
icerpc
协议没有类似
https
"s"变化,也没有用于安全
icerpc
连接的独特安全端口。 当看到服务器地址
icerpc://hello.zeroc.com
时, 可以看到服务器正在监听默认的 icerpc 端口,但无法判断连接到该服务器的连接,将使用哪种传输,以及该传输是否使用了
TLS
。
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
传输可以使用,也可以不使用
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 连接。
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
传输,不支持
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));
Todesk 2025官网版 4.7.2.7 62.95 MB
下载
湘ICP备2022002427号-10 湘公网安备:43070202000427号
© 2013~2024 haote.com 好特网