TCP/IP 與 Internet 網路:第九章 RPC 高階程式介面 上一頁 下一頁
9-9 RPC 的安全性
在一般 Internet 網路上應用遠端程序呼叫,我們希望每一個 RPC 呼叫請求或回應都能夠被驗證,以保證資料的安全性。試想客戶端利用一個 RPC 呼叫,它攜帶某一組參數請求,遠端程序利用這些參數來處理,並回應所需的數值,如果沒有經過適當的安全措施,將很容易使入侵者盜取資料或破壞系統。因此,Client/Server 之間的必需維護一種驗證訊息(Authentication Information)的措施,伺服端可依照此驗證訊息來確定呼叫程序的使用者身分,而客戶端可依此訊息來認證資料確實是來自伺服端所傳送,而非偽裝資料。
一般 RPC 所使用的認證訊息可分為:『憑據』(Credentials)和『證實器』(Verifier)兩部份。憑據是作為驗證使用者身分使用;而證實器是作為使用者傳送訊息的證實使用用,針對上述兩部份在不同的安全措施上,有不同的製作方法,稱之為『驗證措施』,以下分別說明。(如圖 9-8 所示)
(1) None:在這種驗證措施之下,憑據和證實器都是空值,表示並沒有任何安全措施,如 9-8 (a) 所示。伺服端只要接收到任何呼叫請求,都給予處理並回應,相同的,客戶端收到任何回應都相信它是來自所呼叫的伺服端。這就如同我們的程式範例一樣,沒有處理任何安全措施。
(2) Unix:Unix 的驗證措施是來自 Sun NFS(Network File System)的方法,也是 RPC 最早的應用環境。如 9-8 (b) 所示,憑據上填上有關的使用者訊息:主機名稱(Machine Name)、使用者 ID(User ID)、群組 ID(Group ID),以及呼叫的時間戳記(Time Stamp)。這表示遠端主機會驗證使用者身分,是否有足夠權限可以呼叫遠端程序,這應用在網路共享檔案上非常適合。由 9-8 (b)上可以看出,證實器上也是空值,表示不驗證資料傳遞的真實性。
(3) Secure:『安全性 RPC』(Secure RPC)表示必需驗證使用者身分,以及防範入侵者偽裝盜取或破壞資料,其中包含『認證技術』和『加密技術』,如 9-8 (c) 所示。一般 Secure RPC 都是透過客戶端和伺服端交換各自的私人金鑰,來產生秘密金鑰,以作為雙方通訊的憑據。
圖 9-8 RPC 之驗證措施
目前 Internet 網路上的電子商務應用非常普遍,甚至 RPC 程序呼叫也植入在各種應用系統之中,Secure RPC 的重要性更為顯著。如欲更進一步的學習 Secure RPC 製作方法,必須詳加研習有關較低階的 RPC 程序庫的使用方法,才能將一驗證技術植入 RPC 呼叫之中,這一方面請參考較詳細的 RPC 程式編寫技巧,在本書附錄中有些資料非常具有研讀的價值。