簡體   English   中英

如何使用Powershell通過https將自簽名證書發送給客戶端

[英]How to send a self signed certificate to clients over https with powershell

我正在PowerShell中通過https協議創建REST api,以進行測試。 我的目的是創建一個偽https API並使用它來測試我們應用程序的功能(該應用程序需要調用我的測試https api)。 我可以使用以下代碼創建自簽名證書。

$hostIP = Get-NetIPAddress | where{ ($_.InterfaceAlias -in @('Mgmt', 'Ethernet', 'management')) -and ($_.AddressFamily -eq 'IPv4')}
$win_path= 'c:\my_temp\'

$Cert = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -   dnsname $hostIP.IPAddress -NotAfter (Get-Date).AddYears(2)
$Certname = $hostIP.IPAddress.Replace('.','_')
$pw = ConvertTo-SecureString -String "Pazzword" -Force -AsPlainText
$thumbprint = $Cert.Thumbprint
Export-PfxCertificate -cert cert:\localMachine\my\$thumbprint -FilePath 
$win_path\$Certname.pfx  -Force -Password $pw

我正在編寫的REST API看起來像這樣

$listener = New-Object System.Net.HttpListener
$httpUrl = "http://" + $givenArgs.HostName + ":" + $givenArgs.Port + "/"
Write-Output $httpUrl
$listener.Prefixes.Add($httpUrl) 
$httpsUrl = "https://" + $givenArgs.HostName + ":" + 443 + "/"
Write-Output $httpsUrl
$listener.Prefixes.Add($httpsUrl)
$listener.Start()

我的問題是,如果我手動安裝在計算機中創建的證書,則能夠成功地將查詢發送到我的REST api,但只能從我的計算機發送。

我想將證書(在不使用任何CA的情況下向初始請求發送證書的副本)發送給客戶端,以便當客戶端第一次查詢服務器時,它將獲得證書的副本並可以保存以便進一步溝通。

我嘗試過在線查找,但只能找到導致1.忽略證書或2.手動導入證書的解決方案,這不符合我的需要。

感謝您抽出寶貴的時間來研究此內容和您的幫助。 提前致謝。

您不必顯式發送證書。 客戶端每次訪問https站點時,公鑰證書始終隨請求一起返回。 您遇到的問題是,此后,客戶端必須決定如何處理證書。

客戶端將首先查看證書,然后查看它是否受信任。 如果它是受信任的證書(即您購買了Verisign證書),則接受連接。 對於自簽名證書,由於它們不受信任,因此客戶端只有兩個選項:

  1. 忽略證書來源並盲目連接
  2. 接受可以信任的來源並導入證書

您無法繞開這個基本事實。 自簽名證書就像將帶有炸彈形狀的對象交付給客戶端,上面貼有“不屬於炸彈-相信我,我是@ user3543477”這樣的標簽,它們可以忽略該標簽,也可以接受我可以信任@ user3543477。 未經他們的明確同意,您不能將包裹推過前門。 如果標貼上寫着“不是炸彈-相信我,我已經被炸彈專家驗證”,因為客戶信任炸彈專家,那么客戶將毫無疑問地接受該包裹。

自簽名證書用於開發目的。 我不斷地對人們說,不要嘗試讓他們工作,因為你做不到。

進行證書的正確方法是從Verisign之類獲得適當的受信任證書,或者,我現在特別推薦為API量身定制的,是從Let's Encrypt獲得免費證書。 這樣,您將獲得適當的受信任證書,並且無需處理自簽名證書。

使用證書時,必須建立證書路徑。 根CA證書自簽名的。 重點是,他們事先被信任。

在已生成自簽名證書的本地計算機上,該證書是受信任的。 其他機器將沒有該證書:使它們信任您的證書

  • 通常必須將證書添加到您的“受信任的根證書”存儲區(您的選項號2)。在該目錄中,您的操作系統邏輯已添加了公共CA的自簽名證書,或者
  • 即使存在不受信任的根,也必須信任證書路徑(您的選項1。)

因此,基本上,您的選擇就是您所總結的選擇。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM