使用 PowerShell 一行指令自動生成自簽署證書
這是其他生成簽證的辦法
- 使用 openssl 自簽署SSL憑證證書
- 使用 powershell 自簽署SSL證書
第二個一樣用 powershell 但是是有簽署過程的,而本篇沒有簽署過程一行代碼直接完成全部,並自動儲存在 windwos 商店中,所以還需要多一個導出過程。
基於 SharePoint 的無應答登入模式改版後必須使用證書,這邊提供一個最簡證書生成方法,直接使用 PowerShell 5.1 內建的函式即可。
不過有以下兩個小缺點
- 無法匯出空白密碼的證書 pfx 檔案。(有這個需求用 OpenSSL 生成吧)
- 無法直接生成檔案,必須先存入 Windwos Certificate Store 匯出後再刪除
# 1. 定義変数
$CNName = "PnP_Roks"
$OutPath = "D:\mycertificates"
$ExpiryYears = 10
# 2. 生成自簽署證書,存儲在當前用戶證書存儲區
if(-not (Test-Path $OutPath)) { mkdir $OutPath }
$cert = New-SelfSignedCertificate -Subject "CN=$CNName" -DnsName $CNName `
-CertStoreLocation Cert:\CurrentUser\My `
-NotAfter (Get-Date).AddYears($ExpiryYears).date
$cert
# 3. 將證書公鑰導出為 CER 檔案 (需上傳到應用程式中)
$cert |Export-Certificate -FilePath "$OutPath\$CNName.cer"
# 4. 將證書複製到受信任儲存區
$store = New-Object Security.Cryptography.X509Certificates.X509Store("Root", "LocalMachine")
$store.Open("ReadWrite"); $store.Add($cert); $store.Close()
# 5. 將證書導出為 PFX 檔案 (選用)
$Pword = "YourPasswordHere"
$cert |Export-PfxCertificate -FilePath "$OutPath\$CNName.pfx" `
-Password (ConvertTo-SecureString -String $Pword -Force -AsPlainText)
# 6. 移除剛剛生成在個人儲存區的證書 (已經複製到信任區了這裡可以砍)
$cert | Remove-Item
這樣就生成完畢了,如果沒有移除證書的話可以在 certmgr.msc 中的 個人/憑證 區域找到該生成的證書。
需要上傳到 "應用程式" 中的只有 cer 證書而已,包含私鑰的 pfx 檔案不可以外洩。
比較理想的辦法是直接在目標伺服器生成證書,然後只匯出 cer 公鑰上傳到伺服器,一定程度避免私鑰產生副本。
環境允許的話甚至可以設置成不可匯出徹底銷毀,沒了再造一個就行。
上傳完畢接下來登入可以參考這篇 身份驗證 |PnP PowerShell
讀取證書檔案
其中如果要讀取 Store 中的 pfx 檔案可以這樣用
# 當前使用者
Get-Item -Path "Cert:\CurrentUser\My\$($cert.Thumbprint)"
# 本機
Get-Item -Path "Cert:\LocalMachine\My\$($cert.Thumbprint)"
對應的管理介面是
- 當前用戶: certmgr.msc
- 本機電腦: certlm.msc
匯出Linux常見的格式
因為 Windows 不支援匯出 key 這個只能用第三方做了,這邊建議用 openssl 來導出
導出 key 檔案
openssl pkcs12 -in "$CNName.pfx" -nocerts -nodes -out "$CNName.key"
導出 crt 檔案
openssl pkcs12 -in "$CNName.pfx" -clcerts -nokeys -out "$CNName.crt"
沒有留言:
張貼留言