2016-04-26 91 views
6

我想在具有IIS的開發環境中測試SSL連接。爲此,我需要創建一個自簽名的根證書,該證書將安裝在機器存儲中,另一個證書需要使用根證書進行簽名以便在IIS中進行安裝。爲IIS創建有效的測試SSL證書

makecert一起使用現在已棄用,所以我想知道如何使用Powershell和New-SelfSignedCertificate命令執行此操作。如果

獎勵積分,你拿到鑰匙的使用權設置:-)

注:使用自簽名直接在IIS認證不起作用,因爲瀏覽器和WCF認爲它們無效。


供參考,在這裏是如何與makecert做到這一點:

# create the self signed root certificate 
makecert -n "CN=root.lan" -r -sv root.pvk root.cer 

# create the certificate for IIS that gets signed with the root certificate 
makecert -sk "Local Certificate" -iv root.pvk -n "CN=localhost" -ic root.cer -sr localmachine -ss my -sky exchange -pe 

# convert to other formats 
cert2spc localhost.cer localhost.spc 
pvk2pfx -pvk localhost.pvk -spc localhost.spc -pfx localhost.pfx 
+0

如果您只使用RSA密鑰,則'MakeCert.exe'就足夠了,但最好使用'MakeCert.exe'的其他選項。 'New-SelfSignedCertificate'沒有任何優勢。在互聯網上可用的其他Powershell模塊可能會更好。您可以使用[OpenSSL.exe](https://www.openssl.org/)而不是'MakeCert.exe'來創建可在IIS上使用的RSA或橢圓曲線證書。如果您的IIS服務器通過互聯網(端口80)可用,那麼您可以使用Let's Encrypt獲得免費的真正的SSL證書,並且客戶端不需要將「CA」證書安裝在受信任的根目錄中。 – Oleg

+1

問題在於使用'New-SelfSignedCertificate'的原因。我不想使用'MakeCert'或'OpenSSL'。 – MovGP0

+0

只需使用start powershell並使用'New-SelfSignedCertificate - ?'和'get-help New-SelfSignedCertificate -examples'。可能性取決於您使用的Windows版本。將https://technet.microsoft.com/en-us/library/hh848633.aspx與https://technet.microsoft.com/en-us/library/hh848633(v=wps.630).aspx – Oleg

回答

5

New-SelfSignedCertificate新版本,其中包括在Windows 10,描述here。可以使用New-SelfSignedCertificate -?get-help New-SelfSignedCertificate -examples來獲得一些附加信息。

的文件,並可能似乎仍然沒有明確的例子足以建立兩個證書:

  • 一個自簽名的證書,這會從你的例子
  • 第二SSL證書作爲CA證書,與第一張證書籤署。

的實現可能是以下(我寫在多行該選項下面才使文本更具可讀性):

New-SelfSignedCertificate -HashAlgorithm sha384 -KeyAlgorithm RSA -KeyLength 4096 
    -Subject "CN=My Test (PowerShell) Root Authority,O=OK soft GmbH,C=DE" 
    -KeyUsage DigitalSignature,CertSign -NotAfter (get-date).AddYears(10) 
    -CertStoreLocation "Cert:\CurrentUser\My" -Type Custom 

輸出將看起來像

Directory: Microsoft.PowerShell.Security\Certificate::CurrentUser\My 


Thumbprint        Subject 
----------        ------- 
B7DE93CB88E99B01D166A986F7BF2D82A0E541FF CN=My Test (PowerShell) Root Authority, O=OK soft GmbH, C=DE 

的值B7DE93CB88E99B01D166A986F7BF2D82A0E541FF對於使用證書進行簽名非常重要。如果你忘記了價值,你可以通過CN名

dir cert:\CurrentUser\My | where Subject -Like "CN=My Test (PowerShell)*" 

或使用certutil.exe -user -store My發現它在我的當前用戶的商店中顯示的證書。

要創建SSL證書,以及相對於以前創建的證書一個例如可以做的簽字下面

New-SelfSignedCertificate -Type Custom -Subject "CN=ok01.no-ip.org" 
    -HashAlgorithm sha256 -KeyAlgorithm RSA -KeyLength 2048 
    -KeyUsage KeyEncipherment,DigitalSignature 
    -CertStoreLocation "cert:\LocalMachine\My" 
    -Signer cert:\CurrentUser\My\B7DE93CB88E99B01D166A986F7BF2D82A0E541FF 
    -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.1,1.3.6.1.5.5.7.3.2","2.5.29.17={text}DNS=ok01.no-ip.org&DNS=ok01.fritz.box") 

在我看來,最終的證書將具有所需的所有屬性。很顯然,來自以上參數的許多值都包含示例,只有您根據自己的要求修改了這些值。我在這裏沒有描述其他常見步驟,例如在受信任的根中導入根證書,導出證書等等。這些步驟不是你主要問題的psrt。

+0

非常感謝:-) – MovGP0

+1

@ MovGP0:不客氣!我仍然建議您查看Let's Encrypt。看看[這裏](http://weblog.west-wind.com/posts/2016/Feb/22/Using-Lets-Encrypt-with-IIS-on-Windows)。我個人使用[letsencrypt-win-simple](https://github.com/Lone-Coder/letsencrypt-win-simple)使用Let's Encrypt在所有計算機上信任的權限創建SSL證書。 – Oleg

+1

我需要爲CA證書指定'-KeyUsage DigitalSignature,CertSign',否則Web瀏覽器將不驗證'子'證書。 –