您的位置:首頁 > 軟件教程 > 教程 > IceRPC之服務(wù)器地址與TLS的安全性->快樂的RPC

IceRPC之服務(wù)器地址與TLS的安全性->快樂的RPC

來源:好特整理 | 時間:2024-05-12 11:48:43 | 閱讀:74 |  標(biāo)簽: T 地址 S C 服務(wù) 快樂 PC 服務(wù)器 安全   | 分享到:

作者引言 .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),讓自已不在迷茫,快樂的暢游世界。

服務(wù)器地址 ServerAddress

了解服務(wù)器地址的概念和語法。

語法

服務(wù)器地址 URI 具有以下語法: protocol://host[:port][?name=value][&name=value...]

  • protocol 協(xié)議 (URI方案),目前支持 ice icerpc
  • host DNS 名稱 或 IP 地址
  • port 端口號; 未指定時,默認(rèn)端口為 4061 ice 和 4062 icerpc

服務(wù)器地址 URI 必須具有空路徑且沒有片段。它可以有查詢參數(shù),這些參數(shù)通常是特定于傳輸?shù)摹?

查詢參數(shù)傳輸 transport 指定底層傳輸?shù)拿Q。大多數(shù)應(yīng)用程序使用單個傳輸,并將此傳輸配置作為它們可以使用的唯一傳輸。 因此,在服務(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 地址

服務(wù)器配置

指定構(gòu)建服務(wù)器時,要監(jiān)聽的服務(wù)器地址。

如果不指定服務(wù)器地址,默認(rèn)值為 icerpc://[::0] ,這意味著,監(jiān)聽默認(rèn) icerpc 端口 (4062) 上所有接口上的 icerpc 連接。

構(gòu)建服務(wù)器時,服務(wù)器地址的主機(jī)必須是 [::0] 這樣的通配符ip地址,或者是當(dāng)前系統(tǒng)上特定接口的ip地址。

如果端口號指定 0,操作系統(tǒng)將自動分配其短暫范圍內(nèi)的端口號。因?yàn)榉⻊?wù)器不會監(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)自動選擇要使用的端口號。
ice://0.0.0.0:10000 10000 端口上 IPv4 地址的所有接口上監(jiān)聽 ice 連接。

C# 中, 當(dāng)在服務(wù)器地址中指定端口 0 時, Listen 會返回一個服務(wù)器地址, 其中包含 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保護(hù)連接

TLS - 傳輸功能

Ice icerpc 協(xié)議既安全也并非不安全,因?yàn)槭褂?TLS 保護(hù)通信,是底層傳輸?shù)呢?zé)任。

icerpc 協(xié)議沒有類似 https "s"變化,也沒有用于安全 icerpc 連接的獨(dú)特安全端口。 當(dāng)看到服務(wù)器地址 icerpc://hello.zeroc.com 時, 可以看到服務(wù)器正在監(jiān)聽默認(rèn)的 icerpc 端口,但無法判斷連接到該服務(wù)器的連接,將使用哪種傳輸,以及該傳輸是否使用了 TLS

Quic

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

Tcp 傳輸可以使用,也可以不使用 TLS 。如果在為 Tcp 創(chuàng)建客戶端連接時指定 TLS 配置,則該連接將使用 TLS 。如果不指定 TLS 配置,連接將不會使用 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());

對于 Tcp 的服務(wù)器來說,是一樣的。如果在創(chuàng)建此服務(wù)器時,指定 TLS 配置,則服務(wù)器將僅接受 TLS 保護(hù)的連接。 如果在創(chuàng)建此服務(wù)器時未指定 TLS 配置,則服務(wù)器將僅監(jiān)聽并接受簡單的 tcp 連接。

SSL (限于 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)用程序請求安全連接的標(biāo)準(zhǔn)方式是使用具有 ssl 服務(wù)器地址的代理。

IceRPC + Slice 解碼具有 ssl 服務(wù)器地址的服務(wù)地址時, ssl 傳輸捕獲此信息("需要 TLS ")并確保客戶端在調(diào)用此服務(wù)地址時建立安全連接。

對于 Ice , tcp 傳輸意味著"不使用 TLS ". 對于 IceRPC , tcp 傳輸意味著普通 tcp tcp + tls ,具體取決于 TLS 配置。

Icerpc 協(xié)議,客戶端和服務(wù)器都必須有相同的 TLS 期望配置,并且?guī)в? transport=tcp 的 icerpc 服務(wù)器地址,并不是指服務(wù)器都需要 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));

作者結(jié)語

  • 一直做,不停做 ,才能提升速度
  • 翻譯的不好,請手下 留情 ,謝謝
  • 如果對我有點(diǎn)小興趣,如可加我哦,一起探討人生,探討 道的世界
  • 覺得還不錯的話,點(diǎn)個
    IceRPC之服務(wù)器地址與TLS的安全性->快樂的RPC
小編推薦閱讀

好特網(wǎng)發(fā)布此文僅為傳遞信息,不代表好特網(wǎng)認(rèn)同期限觀點(diǎn)或證實(shí)其描述。

相關(guān)視頻攻略

更多

掃二維碼進(jìn)入好特網(wǎng)手機(jī)版本!

掃二維碼進(jìn)入好特網(wǎng)微信公眾號!

本站所有軟件,都由網(wǎng)友上傳,如有侵犯你的版權(quán),請發(fā)郵件[email protected]

湘ICP備2022002427號-10 湘公網(wǎng)安備:43070202000427號© 2013~2024 haote.com 好特網(wǎng)