none
SslStream Client side 無憑證的連線問題 RRS feed

  • 一般討論

  • 各位先進前輩們好, 

    小弟最近在實作Socket 的TLS 加密,使用.Net 本身的 SslStream 類型
    但在google上找了許出的資料資料,但看到的範例,
    幾乎都 Client/Server 兩端均己存在憑證資料。

    例如:
    TLS/SSL and .NET Framework 4.0
    [ASP.NET] 使用 SSL Socket 建立 Client 與 Server 連接

    目前希望可以實作出,Client side 不存在憑證資料,當Client 連上 Server side,Server side 發現Client side 沒有憑證資料,可以回傳憑證資料給Clinet side。

    小弟有想過是否是SslStream 的constructor(...) 或 AuthenticateAsServer(...) 這兩個地方,是否是小弟的功能沒有寫好。
    但試遍小弟所能想到的方式,還是達到不目標。

    請問一下,這想法是否可行?
    若可行,能否提點一下關鍵點或相關資料。
    若不可行,那應該要如何才能達到TLS 加密的效果? 

    例如另外建一個傳送憑證資料的server side。
    等Client side 取得憑證後, 再接到正式的server side?

    2016年10月17日 上午 02:44

所有回覆

  • 謝謝 tihs 大所提供的資料, 小弟我先仔細研讀一下

    2016年10月17日 上午 07:34
  • 研讀完 tihs 提供的資料, 發現他的 client side 本身還在存在 certificate.

    小弟是目前是希望 沒有certificate 的client side , 連上小弟寫的 server side

    以可以以SSL/TLS 加密的方式連線並交換資料。

    不過,小弟在這關上卡的有點久 XD

    2016年10月18日 上午 02:37
  • 這有點矛盾啊, 如果 Client 沒有憑證, 連上 Server 後, Server 就發個憑證給 client , 那還要憑證的意義是 ?

    起碼應該還有個機制控管憑證發放吧? 例如像 AD Certificate Service

    https://technet.microsoft.com/en-us/windowsserver/dd448615.aspx


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    2016年10月18日 下午 02:34
    版主
  • Bill 大,

    謝謝您提供的網址,小弟會好好的研究。

    小弟我也知道這樣很矛盾, 但 IoT 裝置本身沒有憑證, 但又要在與server傳資料時,使用TLS加密。

    跟同事討論,同事說像browser 連上網站,或FTP 連線server, 本身沒有憑證,也可以與server 連線。

    所以IoT 連 server 應該也可以實現相同的做法。

    只是小弟目前在這卡關兩三週了。

    找到的example, 也都是 client, server 均存在憑證為前提的方式。

    所以才會出現上面的想法。


    • 已編輯 依恩 2016年10月19日 上午 06:27
    2016年10月19日 上午 06:25
  • 像browser 連上網站,或FTP 連線server, 本身沒有憑證,也可以與server 連線。 <-- 這是因為瀏覽器本身已經有憑證,只是你不知道而己。

    商用的 SSL 憑證,其用戶端憑證都隨作業系統一起安裝了,一般使用者根本不會知道。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年10月19日 上午 10:49
    版主
  • 謝謝小朱大大的回答.

    那小弟我是否以可以這樣理解..

    「使用SSL/TLS 加密連線時,Client/Server 都一定要有認證,才能保證有安全的連線.」

    當clinet不存在憑證,若忽略 <g class="gr_ gr_48 gr-alert gr_spell gr_run_anim ContextualSpelling ins-del multiReplace" data-gr-id="48" id="48">Clinet</g>/Server 檢查憑證旳部份

    Client 一樣可以成功的傳送資料到 Server 端,而且使用 <g class="gr_ gr_74 gr-alert gr_spell gr_run_anim ContextualSpelling ins-del multiReplace" data-gr-id="74" id="74">wireshark</g> 去看封包內容

    傳送的資料確實也被加密了,

    這種做法,似乎就違背了SSL/TLS 本身的用意了

    2016年10月20日 上午 02:47
  • 一方沒有憑證的話,傳過去的資料無法解密吧?

    就算資料傳過去也沒用。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年10月20日 上午 05:26
    版主
  • 小朱大,

    但小弟我在 client/server 中, 使用 Sslstream, 並在指定 RemoteCertificateValidationCallback 中,強制驗證成功

    Client 傳送的資料,server 可以成功的接收並完成解密動作


    • 已編輯 依恩 2016年10月21日 上午 12:34
    2016年10月21日 上午 12:33
  • http://www.netadmin.com.tw/article_content.aspx?sn=1106140008

    SSL/TLS 會將 server 的公鑰傳給 client,就算是 client 沒有憑證也是可以 work (這個我承認之前沒有注意過 Orz)。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年10月21日 上午 01:37
    版主