作者引言 .Net 8.0 下的新RPC 很高興啊,我們來到了IceRPC之服務(wù)器地址與TLS的安全性->快樂的RPC, 基礎(chǔ)引導(dǎo),讓自已不在迷茫,快樂的暢游世界。 服務(wù)器地址 ServerAddress 了解服務(wù)器地址的概念和語法。 語法 服務(wù)器地址URI具有以下語法: protocol:/
.Net 8.0 下的新RPC
很高興啊,我們來到了IceRPC之服務(wù)器地址與TLS的安全性->快樂的RPC, 基礎(chǔ)引導(dǎo),讓自已不在迷茫,快樂的暢游世界。
ServerAddress
了解服務(wù)器地址的概念和語法。
服務(wù)器地址
URI
具有以下語法:
protocol://host[:port][?name=value][&name=value...]
protocol
協(xié)議 (URI方案),目前支持
ice
或
icerpc
host
DNS 名稱 或 IP 地址
port
端口號(hào); 未指定時(shí),默認(rèn)端口為 4061
ice
和 4062
icerpc
服務(wù)器地址 URI 必須具有空路徑且沒有片段。它可以有查詢參數(shù),這些參數(shù)通常是特定于傳輸?shù)摹?
查詢參數(shù)傳輸
transport
指定底層傳輸?shù)拿Q。大多數(shù)應(yīng)用程序使用單個(gè)傳輸,并將此傳輸配置作為它們可以使用的唯一傳輸。 因此,在服務(wù)器地址中省略傳輸
transport
是很常見的。
C# 中,結(jié)構(gòu)體
ServerAddress
是服務(wù)器地址 URI 的解析和驗(yàn)證,用于保存URI信息等。
客戶端連接的主要配置是服務(wù)器的地址。 它告訴客戶端連接如何到達(dá)服務(wù)器。DNS 名稱在這些服務(wù)器地址中是很常見的。
例如:
服務(wù)器地址 | 說明 |
---|---|
icerpc://hello.zeroc.com
|
使用
icerpc
協(xié)議連接到端口 4062 上的
hello.zeroc.com
, 未指定底層傳輸。
|
icerpc://192.168.100.10:10000?transport=quic
|
使用 QUIC 上的
icerpc
協(xié)議,連接端口 10000 上的
192.168.100.10
Ip地址
|
ice://hello.zeroc.com
|
使用 ice 協(xié)議連接端口 4061 上的
hello.zeroc.com
地址
|
指定構(gòu)建服務(wù)器時(shí),要監(jiān)聽的服務(wù)器地址。
如果不指定服務(wù)器地址,默認(rèn)值為
icerpc://[::0]
,這意味著,監(jiān)聽默認(rèn)
icerpc
端口 (4062) 上所有接口上的
icerpc
連接。
構(gòu)建服務(wù)器時(shí),服務(wù)器地址的主機(jī)必須是
[::0]
這樣的通配符ip地址,或者是當(dāng)前系統(tǒng)上特定接口的ip地址。
如果端口號(hào)指定 0,操作系統(tǒng)將自動(dòng)分配其短暫范圍內(nèi)的端口號(hào)。因?yàn)榉⻊?wù)器不會(huì)監(jiān)聽 tcp 或 udp 端口 0。
以下是一些示例:
服務(wù)器地址 | 說明 |
---|---|
icerpc://192.168.100.10
|
使用默認(rèn)
icerpc
端口 4062,監(jiān)聽與
192.168.100.10
關(guān)聯(lián)的接口上的
icerpc
連接。
|
icerpc://[::0]:0
|
監(jiān)聽所有接口上的
icerpc
連接;操作系統(tǒng)自動(dòng)選擇要使用的端口號(hào)。
|
ice://0.0.0.0:10000
|
10000 端口上 IPv4 地址的所有接口上監(jiān)聽 ice 連接。 |
C# 中, 當(dāng)在服務(wù)器地址中指定端口 0 時(shí),
Listen
會(huì)返回一個(gè)服務(wù)器地址, 其中包含 OS 選擇的端口號(hào);
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保護(hù)連接
Ice
和
icerpc
協(xié)議既安全也并非不安全,因?yàn)槭褂?TLS 保護(hù)通信,是底層傳輸?shù)呢?zé)任。
icerpc
協(xié)議沒有類似
https
"s"變化,也沒有用于安全
icerpc
連接的獨(dú)特安全端口。 當(dāng)看到服務(wù)器地址
icerpc://hello.zeroc.com
時(shí), 可以看到服務(wù)器正在監(jiān)聽默認(rèn)的 icerpc 端口,但無法判斷連接到該服務(wù)器的連接,將使用哪種傳輸,以及該傳輸是否使用了
TLS
。
Quic
傳輸協(xié)議,始終是安全的。 如果將客戶端連接配置為使用
Quic
,則該連接將使用
TLS
。
例如:
// Always uses TLS.
await using var connection = new ClientConnection(
"icerpc://hello.zeroc.com",
multiplexedClientTransport: new QuicClientTransport());
同樣的邏輯也適用于服務(wù)器:如果將服務(wù)器配置為使用
Quic
,則該服務(wù)器接受的任何連接都將使用
TLS
。
在 C# 中,需要為任何使用
Quic
的服務(wù)器指定
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
創(chuàng)建客戶端連接時(shí)指定
TLS
配置,則該連接將使用
TLS
。如果不指定
TLS
配置,連接將不會(huì)使用
TLS
。
在 C# 中,該客戶端
TLS
配置由
SslClientAuthenticationOptions
參數(shù)提供。例如:
// 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());
對(duì)于
Tcp
的服務(wù)器來說,是一樣的。如果在創(chuàng)建此服務(wù)器時(shí),指定
TLS
配置,則服務(wù)器將僅接受
TLS
保護(hù)的連接。 如果在創(chuàng)建此服務(wù)器時(shí)未指定 TLS 配置,則服務(wù)器將僅監(jiān)聽并接受簡(jiǎn)單的 tcp 連接。
ice
)
Ice
服務(wù)器地址可以指定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");
相當(dāng)于:
await using var connection = new ClientConnection(
"ice://hello.zeroc.com?transport=tcp",
new SslClientAuthenticationOptions());
ssl
傳輸僅用于向后兼容
Ice
:
Ice
應(yīng)用程序請(qǐng)求安全連接的標(biāo)準(zhǔn)方式是使用具有
ssl
服務(wù)器地址的代理。
IceRPC
+
Slice
解碼具有
ssl
服務(wù)器地址的服務(wù)地址時(shí),
ssl
傳輸捕獲此信息("需要
TLS
")并確保客戶端在調(diào)用此服務(wù)地址時(shí)建立安全連接。
對(duì)于
Ice
,tcp
傳輸意味著"不使用TLS
". 對(duì)于IceRPC
,tcp
傳輸意味著普通tcp
或tcp
+tls
,具體取決于TLS
配置。
Icerpc
協(xié)議,客戶端和服務(wù)器都必須有相同的
TLS
期望配置,并且?guī)в?
transport=tcp
的 icerpc 服務(wù)器地址,并不是指服務(wù)器都需要
TLS
。
用于測(cè)試的
coloc
傳輸,不支持
TLS
,如果使用
coloc
指定 TLS 配置,將收到錯(cuò)誤。
// 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));
機(jī)器學(xué)習(xí):神經(jīng)網(wǎng)絡(luò)構(gòu)建(下)
閱讀華為Mate品牌盛典:HarmonyOS NEXT加持下游戲性能得到充分釋放
閱讀實(shí)現(xiàn)對(duì)象集合與DataTable的相互轉(zhuǎn)換
閱讀鴻蒙NEXT元服務(wù):論如何免費(fèi)快速上架作品
閱讀算法與數(shù)據(jù)結(jié)構(gòu) 1 - 模擬
閱讀5. Spring Cloud OpenFeign 聲明式 WebService 客戶端的超詳細(xì)使用
閱讀Java代理模式:靜態(tài)代理和動(dòng)態(tài)代理的對(duì)比分析
閱讀Win11筆記本“自動(dòng)管理應(yīng)用的顏色”顯示規(guī)則
閱讀本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請(qǐng)發(fā)郵件[email protected]
湘ICP備2022002427號(hào)-10 湘公網(wǎng)安備:43070202000427號(hào)© 2013~2025 haote.com 好特網(wǎng)