2017-06-05 72 views
0

有沒有辦法在Volley上簽名http請求?在Volley中籤署HTTP請求

據我瞭解SSL連接。

  • 客戶打開連接
  • 服務器包含公開密鑰
  • 客戶機存儲服務器的公鑰
  • 客戶端創建請求和體徵它與服務器的公鑰
  • 服務器證書響應使用自己的私人驗證請求鍵

如果服務器發送響應,客戶端驗證響應與服務器的公鑰?

ssl pinning如何適應這個過程?

回答

1

不,它不以這種方式工作。沒有HTTP請求的簽名。總之:

  • 客戶端建立一個TLS連接到其中涉及
    • 服務器發送證書給客戶
    • 客戶端驗證該證書的服務器,即它是可信的,服務器相匹配名稱,並且服務器擁有屬於該證書的私鑰。在此步驟中也會檢查證書鎖定,即證書(或其公鑰)是否與期望值匹配。
    • 隨後其導致的密鑰進行加密和消息保護
  • 從則密鑰交換上交換的信息加密,並防止修改保護的所有數據

TLS本身不知道HTTP,即不知道HTTP請求和響應是什麼。它只看到它保護的數據流。 HTTP請求和響應是此流的一部分,因此受到保護,但沒有特定的HTTP請求或響應簽名。

+0

@ JakubGruber:密鑰交換的結果是一個預主祕密,它被轉換爲主密鑰,然後用它來派生加密和HMAC的祕密。確切的細節並不那麼重要,但如果您有興趣,請參閱[SSL/TLS如何工作?](https://security.stackexchange.com/questions/20803/how-does-ssl-tls-work)或擁有看看[TLS標準](https://www.ietf.org/rfc/rfc5246.txt)。 –

+0

所以..流受到保護,因爲我驗證了服務器的密鑰並且我信任它。 (因爲我的公鑰已經固定並匹配)。後來,我發送請求,我不需要簽名。但是,如果我願意? –

+0

@JakubGruber:沒有爲HTTP對HTTP請求進行簽名的機制,如果您在TLS之上使用HTTP(即HTTPS),則也不可能。但是不應該使用HTTPS來做到這一點,因爲TLS的請求就像所有其他受保護的數據一樣不受操縱。 –

1

我想你已經知道它的主旨了。 SSL固定只是驗證服務器響應提供的CA證書。

我認爲這個網址是正確的。也許它可以幫助你

SSL Pinning with Volley network library on Android

+0

但是,如果服務器最終發送給我的回覆,我該如何驗證?他應該用公鑰簽名並且客戶端應該使用私鑰進行驗證。 我看不到客戶的私鑰來自哪裏。 –

+0

從更一般的意義上講,可信CA必須事先存在於密鑰存儲區中。當響應到達時,客戶端通過在trustmanager的幫助下檢查該密鑰庫來檢查收到的CA是否可信。您不需要知道客戶密鑰的來源應該滿足某些標準以證明其真實性 –

+0

並且只是最後一個註釋。作爲客戶,我是否使用(某些)私鑰或服務器的公鑰來請求籤名? –