kubernetes實戰篇之windows新增自籤ca證書信任
系列目錄
由於服務端設定了https訪問,因此如果通過瀏覽器訪問時會提示證書不被信任,但是仍然可以通過處理繼續訪問.但是在自動化環境中,都是通過命令來請求的,這樣不受信任的https就會報錯誤,這樣我們就要像docker伺服器一樣新增對自簽證書的信任.前兩部分我們分別在docker推送映象和拉取映象時添加了信任證書操作.但是都是基於linux的,在自動化環境中,可能有的節點是windows節點,我們這一節來看下如何在windows環境下新增自簽證書信任.
我們先來看一下如果沒有新增證書信任的情況下通過命令請求的結果是什麼樣子的
C:\Users\tyler>curl https://192.168.124.43:8443/ curl: (77) schannel: next InitializeSecurityContext failed: SEC_E_UNTRUSTED_ROOT (0x80090325) - The certificate chain was issued by an authority that is not trusted. C:\Users\tyler>
可以看到,請求失敗,提示的錯誤資訊是證書不被信任.
由於我的windows測試機上安裝了curl因此會出現curl命令,如果你沒有安裝則會出現curl不是一個命令的錯誤.如果不想裝curl可以通過powershell來請求,具體操作如下
PS C:\Users\tyler> Invoke-WebRequest https://192.168.124.43:8443/ Invoke-WebRequest : The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel. At line:1 char:1 + Invoke-WebRequest https://192.168.124.43:8443/ + ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + CategoryInfo : InvalidOperation: (System.Net.HttpWebRequest:HttpWebRequest) [Invoke-WebRequest], WebExc eption + FullyQualifiedErrorId : WebCmdletWebResponseException,Microsoft.PowerShell.Commands.InvokeWebRequestCommand PS C:\Users\tyler>
可以看到,沒有新增信任通過命令請求就會返回錯誤.下面我們講下如何在windows環境下新增自簽證書信任
儲存證書
首先,開啟cmd,cd到一個自已便於記的目錄,然後執行命令keytool -printcert -sslserver 192.168.124.43:8443 -rfc >nexus.crt
前面已經說過要執行keytool命令需要正確配置java,如果仍然無法執行,可以從java安裝目錄裡找到
keytool.exe
,以上命令的keytool換成keytoolexe
的完整路徑.
- 在cmd裡輸入mmc命令,這時候會彈出一個介面
如果你看到頁面裡面的內容沒有上面的多,也不用擔心,因為這個狀態並非初始狀態.
- 執行檔案-新增/刪除管理節點
- 從左邊找到"證書"然後點選"新增"
在以上操作過程中會出現一個選擇,預設選擇當前使用者即可.
以上操作完以後點選確定.然後展開左側的證書,並執行以下操作
點選匯入就會出現一個選擇對話方塊,這時候找到我們剛才儲存的nexus.crt檔案匯入.最後會出現一個警示,這時候選擇確定.而不是取消.
這時候,如果關閉主介面的時候會提示是否儲存設定,這裡取消即可.證書信任已經儲存.
這個時候我們再執行curl
或者powershell invoke-webrequest
,即可以年到如下資訊
>curl https://192.168.124.43:8443/
<!DOCTYPE html>
<html lang="en">
<head>
<title>Nexus Repository Manager</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta name="description" content="Nexus Repository Manager"/>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
...
由於內容太長,這裡就不再輸完整的