2012-10-25 82 views
37

我使用WCF創建了一個WebService。我正在做自我託管,我想啓用HTTPS。根據我對此的理解,我需要創建一個證書並綁定到我想要使用的端口。綁定到端口時,SSL證書添加失敗

這裏是我所做的來處理這個步驟:創建的證書我的本地機器充當根證書頒發機構

    • makecert -n「CN =我的根證書管理局 「-r -sv RootCATest.pvk RootCATest.cer
  1. 開業MMC.EXE並導入保存.cer文件到」 受信任的根證書\證書\文件夾
    • makecert -sk MyKeyName -IV RootCATest.pvk -n 「CN = MyMachineName」 -IC RootCATest.cer -sr LOCALMACHINE -ss我-sky交換-pe MyMachineName.cer
  2. 創建的臨時服務證書從簽署的根證書頒發機構

    • makecert -sk MyKeyName -IV RootCATest.pvk -n 「CN = MyMachineName」 -IC RootCATest.cer -sr LOCALMACHINE -ss我-sky交換-pe MyMachineName.cer
  3. 試圖綁定證書的端口號(443在這種情況下)

    • netsh的HTTP添加的sslcert ipport = 0.0.0.0:443 CERTHASH = 2c5ba85bcbca412a74fece02878a44b285c63981的appid = {646937c0-1042-4e81-a3b6-47d678d68ba9}

結果從第4步是以下錯誤:

SSL Certificate add failed, Error 1312

A specified logon session does not exist. It may already have been terminated.

有沒有人有一個線索,爲什麼我可能會得到這個錯誤?

+1

您必須導入根證書和自簽名證書。那麼它的工作, –

+2

如果其他人遇到這個問題,並在這裏的答案沒有明確回答它,底層的核心問題是需要導入的私鑰。如果您在導入證書時不*將*標記爲可導出,則不會導入私鑰並且您無法綁定它。如果您刪除它並重新導入並將其標記爲可導出,那麼它將起作用。 –

回答

4

問題出在第4步。我使用根證書中的指紋作爲certhash中的值。爲了解決這個問題,我必須回到MMC並刷新證書(本地計算機) - >個人 - >證書文件夾。然後使用「頒發者」根證書頒發機構的證書中的指紋。

32

我有同樣的錯誤。第一次發生,正如Micheal所說,我必須在證書(本地計算機) - >個人 - >證書文件夾下移動證書。當我在另一臺機器上導入相同的證書時,我遇到了同樣的錯誤。原因是我使用certmgr.msc導入證書。 。打開的窗口顯示「證書 - 當前用戶」。使用此窗口導入的證書會導致netsh失敗並顯示1312錯誤。確保使用MMC中的證書管理單元導入證書。 MMC中的證書管理單元顯示「證書(本地計算機)」。這可以讓netsh執行通過。

+0

你我的朋友是救命恩人!!! – JustAGuy

+0

同上。這讓我有半天的時間。非常感謝 - M $請讓這更明顯! – penderi

+0

謝謝 - 完美的工作。 –

18

我一直在處理這個問題,我正在使用自託管的WCF服務。我剛剛取得了突破:

我在機器商店的個人文件夾中擁有證書。它過期了,我的經理髮了一個新的。這個錯誤導致新的失敗。我嘗試了谷歌的很多東西,但最終使用完全不同的解決方案解決了這個問題。

我安裝了兩個證書 - 過期的和新的。然後我用這個命令來獲取它們的列表:

certutil -store My

我得到這個輸出(信息是假的和其他證書未列出):

================ Certificate 1 ================ 
Serial Number: 6d 
Issuer: [email protected], CN=VoiceTrust Server CA, OU=VoiceTrust Oper 
ations, O=VoiceTrust 
NotBefore: 03-Jan-2013 3:33 PM 
NotAfter: 03-Mar-2013 3:33 PM 
Subject: [email protected], CN=hornet.voicetrust.com, OU=Software Develop 
ment, O=VoiceTrust eServices MENA FZ LLC, L=Dubai, C=AE 
Non-root Certificate 
Cert Hash(sha1): 98 5f a0 d3 11 6a 4b 64 3b db 0a a4 11 66 fc 08 28 74 7e 53 
    Key Container = {E5BC0912-7808-4B89-B457-31946DE5990E} 
    Unique container name: dfedfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b6 
4-30f0d6589239 
    Provider = Microsoft Enhanced Cryptographic Provider v1.0 
Private key is NOT exportable 
Encryption test passed 

================ Certificate 2 ================ 
Serial Number: 6d 
Issuer: [email protected], CN=VoiceTrust Server CA, OU=VoiceTrust Oper 
ations, O=VoiceTrust 
NotBefore: 03-Nov-2013 3:33 PM 
NotAfter: 03-Dec-2013 3:33 PM 
Subject: [email protected], CN=hornet.voicetrust.com, OU=Software Develop 
ment, O=VoiceTrust eServices MENA FZ LLC, L=Dubai, C=AE 
Non-root Certificate 
Cert Hash(sha1): 30 5f a0 d3 11 6a 4b 64 3b db 0a a4 11 66 fc 08 28 74 7e 53 
    Key Container = {E5BC0912-7808-4B89-B457-31946DE5960E} 
    *Unique container name:* 55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b6 
4-30f0d6589239 
    Provider = Microsoft Enhanced Cryptographic Provider v1.0 
Private key is NOT exportable 
Encryption test passed 

現在,一切似乎都不錯,但證書1已過期,如果我試圖將其綁定到端口,則證明2有效;而證書2則因錯誤1312而失敗。

令我困惑的關鍵區別是獨特容器名稱屬性。它應該代表%ProgramData%\Microsoft\Crypto\RSA\MachineKeys\

硬盤上的物理密鑰文件對於證書1,該文件在那裏,但對於證書2,沒有這樣的文件。搜索後,我在%AppData%\Microsoft\Crypto\文件夾的子文件夾中找到了針對證書2的文件。這是用戶特定的鍵而不是機器級別鍵。令人驚訝的是,證書被導入到計算機商店,但它始終保留用戶商店的容器密鑰。

我刪除AppData文件夾下的「55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b64-30f0d6589239」文件並運行修復命令我在商店證書2:

certutil -repairstore My 2

這個時候,唯一容器名稱反映了'%ProgramData%\ Microsoft \ Crypto \'下正確文件夾中的文件,並且所有內容都開始工作。

希望這對某人有幫助。

+0

這幫助我瞭解我的問題。我使用OpenSSL來生成根CA和SSL證書。當我運行「certutil -store My」時,SSL證書表示「沒有關鍵提供者信息」。我對SSL證書執行了「openssl pkcs12」,現在它顯示「Provider = Microsoft Enhanced Cryptographic Provider v1.0」。 – cstick

1

接收此錯誤的方法有多種(請參閱上面的其他答案)。

接收此特定錯誤的另一種方法是,當證書不在適當的存儲區中時,嘗試將證書綁定到端口。

確認證書存儲在localMachine根存儲中(可以使用certutil或certmgr.exe從命令行將其正確轉儲)。

更新語法:)

8

我一直在戰鬥錯誤1312一整天,什麼固定它,我是在MMC導入證書作爲.p12文件,而不是.CRT。如果您在使用OpenSSL創建它,然後,一旦你已經創建了.CRT,做到:

pkcs12 -export -in server.crt -inkey server.key -name 「Your Name」 -out server.p12 

As described。當你用mmc導入它時,它會被稱爲「個人信息交換」文件(顯然.pfx文件也可以工作)。

我是新來寫服務器和處理SSL,我不知道爲什麼這個工程,但我希望它可以幫助。

+0

對我而言,第一個答案不是使用自簽名證書,而是「官方」ssl證書。我只是使用mmc證書管理工具將完整的證書鏈導出到pfx/p12。 – z00l

5

我的問題是CER文件沒有附加私鑰。

我已經附加使用這些OpenSSL的PK命令:

openssl x509 -in server.der -inform DER -out server.pem -outform PEM 
openssl pkcs12 -export -in server.pem -inkey serverkey.pem -out server.p12 

Works的CER/DER文件。

25
SSL Certificate add failed, Error 1312 

A specified logon session does not exist. It may already have been terminated. 

我曾經有完全相同的問題,花了幾天的時間試圖找出原因是什麼。

爲了長話短說:問題在於你已經在沒有私鑰的winrm服務器上安裝證書。

我已經檢查了好幾次。你必須刪除您的證書,並通過使用makecert例如重建它,因爲它是完美的描述這裏:http://blogs.technet.com/b/jhoward/archive/2005/02/02/365323.aspx

您可以輕鬆地檢查您的證書具有私人的關鍵是這樣:mmc - certificates - local machine - personal。看看證書的圖標 - 它必須在圖標上有關鍵標誌。

+1

它完全解決了我的問題。關鍵是左上角有一個小「鑰匙」的圖標。沒有「鑰匙」,1312.憑藉「鑰匙」,成功! – Verilocos

+0

這也是我的情況。我看到了失蹤的鑰匙圖標,但我沒有給它太多的重要性。對我感到羞恥。 – Gayolomao

+0

如果您有沒有私鑰的證書(SnapIn中證書圖標左上角沒有鑰匙符號),您可以按以下步驟添加鑰匙: https://support.microsoft.com/en-us/kb/889651 - 小心!和其他與此相關的事情一樣,如果您從「詳細信息」中複製/粘貼密鑰,最終可能會在打開的雙引號和指紋或序列號的第一位之間出現不可打印的字符(問號在控制檯窗口中)證書對話框。刪除它! 例如:certutil -repairstore my「?ad 59 ... etc ... 那'?'需要去 – BRebey

0

儘管我的.pfx文件有私鑰,但我的確有同樣的問題。使用MMC控制檯添加證書已成功,但每次使用.Net X509Store.Add(X509Certificate2)方法進行編程式添加時都會失敗,出現錯誤1312.證書甚至在圖標上有一個關鍵標誌。
經過幾天Finaly決定使用makecert.exe創建新證書,如帖子中的建議。之後,一切都很好。密鑰出現在%ProgramData%\ Microsoft \ Crypto \ RSA \ MachineKeys中。出於某種原因,我的早期pfx文件不兼容。

根據我的經驗,只要你的鑰匙沒有出現在%ProgramData%\ Microsoft \ Crypto \ RSA \ MachineKeys \中,與'netsh http add sslcert ....'綁定就會失敗。

1

如果:

  1. 你沒有IIS你的機器上(帶自託管WCF的工作讓我們說),並
  2. 您使用IIS管理器中進行另一臺機器上的證書請求(因爲你不明白的是,私人密鑰來自嵌入在證書請求密碼 - 後來發行.pb7

則:

  1. 只需在您用來發出證書請求的IIS機器(本地機器/個人/證書 - 使用mmc)上安裝.pb7;
  2. 從該機器導出證書,包括其私鑰(分配密碼);和
  3. 使用mmc在WCF服務器上安裝它(本地計算機/個人/證書 - 使用mmc)。

然後,netsh將讓您綁定到端口443.沒有更多的1312錯誤。

2

我有同樣的問題,解決了使用此命令導入證書:

c:> certutil -importPFX certname.pfx

現在證書出現使用這個命令:證書沒有按這個命令之前

c:> certutil -store my

沒有出現

1

只是想拋出另一個答案環,這是我的問題:

儘管我將我的證書導入(Local Computer)\...證書存儲區,但我已將其導入到Trusted Root Certification Authorities部分。我需要將它導入Personal部分,否則會發生此錯誤。

0

參數certstorename應該是來自.net框架名稱空間System.Security.Cryptography.X509CertificatesStoreName枚舉的字符串值。

0

我已經在這上面工作了幾個小時,基本上讀了@DoomerDGR8上面說的,但我的修復更簡單了。我跑

C:\Windows\system32> certutil -store TRUSTEDPUBLISHER 

我已經安裝了此列出了幾個證書,然後我跑維修店,我在和netsh的安裝問題在證書上。

C:\Windows\system32> certutil -repairstore TRUSTEDPUBLISHER 6 

末數代表您的證書,在賣場中發現的指標,希望這有助於

1

這似乎是顯而易見的;不過,我認爲這可以幫助人們節省一些時間頭部劃傷。我在個人證書文件夾(針對個人計算機帳戶)下導入了擴展名爲.cer的文件。過了一段時間,我意識到我需要導入帶* .pfx擴展名的文件。修正了這個問題,並且聲音!問題解決了!

+1

這似乎很明顯,但是當你沒有意識到你需要PFX ...謝謝! –

0

在我的情況下,當創建證書時,我爲我的Cert Store名稱選擇了一個與My不同的名稱。默認名稱是MY。所以,如果你的不同,追加certstorename = 您提供的商店名稱到命令。

5

我已經購買了官方Thawte證書,以確保自己託管(控制檯應用程序)Web服務通過我們的Internet服務器上的特定端口。 然後,我收到了Thawte證書,並在我們的Internet服務器上安裝了mmc證書(證書隨後在「受信任的根證書頒發機構」下可見(圖像上的鑰匙圖標,顯示證書包含私鑰是什麼必須能夠綁定到一個端口btw)。

下一步是使<port>爲HTTPS:

netsh http add urlacl url=https://+:<port>/ user=everyone 

)用於HTTPS(什麼是沒有問題的)

下一步是使端口(:

netsh http add sslcert ipport=0.0.0.0:<port> certhash=<thumbprint to certificate> appid={<guid to application>} 

此錯誤消息已失敗:
SSL證書添加失敗,錯誤:1312一個指定的登錄會話不存在。它可能已經被終止。

然後我搜索了互聯網,並嘗試了各種建議的解決方法(沒有成功)。

我的情況的解決方案是certstorename = root添加到netsh命令:

netsh http add sslcert ipport=0.0.0.0:<port *1)> certstorename=Root certhash=<thumbprint to certificate *2)> appid={<guid to application *3)>} 

注:
如果沒有 certstorename應用於網netsh命令,netsh的取默認,什麼是MY(什麼目標證書存儲:「個人」,其中自籤證書正常存儲)。
目標證書存儲區:「受信任的根證書頒發機構」

* 1):端口,您要使用的連接
* 2):可以,如果你的指紋提取到的證書,打開證書(在Windows系統上,只需雙擊瀏覽器中的證書) - 選擇標籤「詳細信息」並點擊「指紋」。然後顯示「指紋」並可以複製。複製指紋並刪除所有空格...
* 3):作爲appid,您可以採用{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}形式的任何ID,因爲APPID僅供參考。 使用命令「netsh http show sslcert」,您可以查詢整個機器上的綁定證書,並將看到信息,哪個appid綁定到哪個證書(在實踐中並不真正有用btw) 在我的情況下,創建使用OpenSSL(BouncyCastle的)自簽名證書時(從VS生成)GUID到我的Web服務應用程序

0

我有同樣的錯誤,我從這篇文章幫助解決它: Cannot export generated certificate with private key to byte array in .net 4.0/4.5

我不得不添加:

 RsaPrivateKeyStructure rsa = RsaPrivateKeyStructure.GetInstance(seq); //new RsaPrivateKeyStructure(seq); 
     RsaPrivateCrtKeyParameters rsaparams = new RsaPrivateCrtKeyParameters(
      rsa.Modulus, rsa.PublicExponent, rsa.PrivateExponent, rsa.Prime1, rsa.Prime2, rsa.Exponent1, rsa.Exponent2, rsa.Coefficient); 

     var rsaPriv = DotNetUtilities.ToRSA(rsaparams); 

     var cspParams = new CspParameters 
     { 
      KeyContainerName = Guid.NewGuid().ToString(), 
      KeyNumber = (int)KeyNumber.Exchange, 
      Flags = CspProviderFlags.UseMachineKeyStore 
     }; 

     var rsaPrivate = new RSACryptoServiceProvider(cspParams);** 

     // Import private key from BouncyCastle's rsa 
     rsaPrivate.ImportParameters(rsaPriv.ExportParameters(true)); 

     // Set private key on our X509Certificate2 
     x509.PrivateKey = rsaPrivate; 
0

所以要添加(還)修復/情況。

我有使用BouncyCastle創建自簽名證書的C#代碼。

<packages> 
    <package id="BouncyCastle" version="1.8.1" targetFramework="net45" /> 

因此,我的代碼創建了證書並將它們放置在Cert-Store中的正確位置。

使用這裏的提示,我安裝的內部總線服務總線1.1失敗了......這導致我在這裏。

我最終刪除了BouncyCastle代碼創建的兩個證書(從證書存儲區)並重新導入它們(使用私鑰)....這一切都奏效了。 我進口第一至

Certificates (Local Computer)/Personal/Certificates

然後我複製粘貼(在MMC)任何其他地方(店),我需要他們。

我的「之前」和「之後」看起來完全一樣從我的眼睛在MMC中,但它解決了這個問題。去搞清楚。

0

我剛剛還有另一個錯誤。我使用相同的私鑰爲我們的CA重新申請了我們的WorkFolders服務的過期證書。然後我總是收到錯誤1312.即使證書管理顯示我有私鑰。
我只能通過重新頒發新證書(不帶更新選項)來解決問題。然後它第一次嘗試。
也許這會幫助也嘗試更新選項的人。

0

如果有其他人遇到這個問題,並且這裏的答案沒有明確地回答它,底層的核心問題是需要導入的私鑰。如果您在導入時將而不是標記爲可導出,則私鑰不會導入,您無法將其綁定。如果您刪除它並重新導入並將其標記爲可導出,那麼它將起作用。

它也需要是其他人指出的本地機器商店。

相關問題