绑定到端口时,SSL证书添加失败

Mic*_*son 59 ssl https

我使用WCF创建了一个WebService.我正在进行自托管,我想启用HTTPS.根据我对此的理解,我需要创建一个证书并绑定到我想要使用的端口.

以下是我为处理此问题所采取的步骤:

  1. 在我的本地计算机上创建证书以充当根证书颁发机构
    • makecert -n"CN =我的根证书颁发机构"-r -sv RootCATest.pvk RootCATest.cer
  2. 打开MMC.exe并将保存的.cer文件导入"受信任的根证书\ Certificates \"文件夹
    • makecert -sk MyKeyName -iv RootCATest.pvk -n"CN = MyMachineName"-ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe MyMachineName.cer
  3. 从签名的根证书颁发机构创建临时服务证书

    • makecert -sk MyKeyName -iv RootCATest.pvk -n"CN = MyMachineName"-ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe MyMachineName.cer
  4. 试图将证书绑定到端口号(在这种情况下为443)

    • netsh http add sslcert ipport = 0.0.0.0:443 certhash = 2c5ba85bcbca412a74fece02878a44b285c63981 appid = {646937c0-1042-4e81-a3b6-47d678d68ba9}

步骤4的结果是以下错误:

SSL证书添加失败,错误1312

指定的登录会话不存在.它可能已经被终止了.

有没有人知道为什么我可能会收到此错误?

Dil*_*rma 51

我有同样的错误.第一次发生时,正如Micheal所说,我必须将证书移到证书(本地计算机) - >个人 - >证书文件夹下.当我在另一台机器上导入相同的证书时,我遇到了同样的错误.原因是我使用certmgr.msc导入证书..因此打开的窗口显示"证书 - 当前用户".使用此窗口导入的证书会导致netsh因1312错误而失败.确保在MMC中使用证书管理单元来导入证书.MMC的证书管理单元显示"证书(本地计算机)".这让netsh执行成功.

  • 如果您指定证书所在的存储(例如 certstorename=WebHosting),则它可以工作。https://learn.microsoft.com/en-us/windows/desktop/http/add-sslcert (3认同)
  • 同上。这让我折腾了半天。非常感谢 - M$ 请让这更明显! (2认同)

Ale*_*lex 44

SSL Certificate add failed, Error 1312

A specified logon session does not exist. It may already have been terminated.
Run Code Online (Sandbox Code Playgroud)

我曾经有过完全相同的问题,花了几天时间试图弄清楚原因是什么.

总而言之:问题是您已在winrm没有PRIVATE KEY 的服务器上安装了证书.

我已经多次检查了这个.您必须删除您的证书并使用makecert例如重建它,如下所述:http://blogs.technet.com/b/jhoward/archive/2005/02/02/365323.aspx

您可以轻松检查您的证书是否具有私钥,如下所示:mmc- certificates- local machine- personal.看看证书的图标 - 它必须在图标上有关键标志.

  • 如果您有一个没有私钥的证书(SnapIn证书图标的左上角没有密钥符号),则可以按照以下步骤添加密钥:https://support.microsoft.com/zh-cn/kb/889651 -注意!与其他与此相关的事情一样,如果您从“详细信息”中复制/粘贴密钥,则您可能会在开头的双引号和指纹或序列号的第一位之间出现一个不可打印的字符(控制台窗口中的问号)。证书对话框。删除它!例如:certutil -repairstore my“?ad 59 ... etc ... That'?' 需要走。 (3认同)
  • 它完全解决了我的情况.关键点是左上角有一个小"钥匙"的图标.没有"钥匙",1312.随着"关键",成功! (2认同)

Has*_*zar 21

我一直在处理这个问题,我正在使用自托管的WCF服务.我刚刚取得了突破:

我在Machine store的人员文件夹中有一个证书.它已过期,我的经理发布了一个新的.这个错误让我失败了.我尝试了很多来自谷歌的东西,但最后,使用完全不同的解决方案解决了这个问题.

我安装了两个证书 - 过期的证书和较新的证书.然后我使用此命令获取它们的列表:

certutil -store My

我得到这个输出(信息是假的,其他证书没有列出):

================ Certificate 1 ================
Serial Number: 6d
Issuer: E=operations@voicetrust.com, 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: E=hgulzar@voicetrust.com, 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: E=operations@voicetrust.com, 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: E=hgulzar@voicetrust.com, 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
Run Code Online (Sandbox Code Playgroud)

现在,一切似乎都没问题,但证书1已过期,如果我尝试将其绑定到端口,则工作正常,而证书2则因错误1312而失败.

困扰我的关键区别是Unique容器名称属性.它应该代表硬盘驱动器中的物理密钥文件%ProgramData%\Microsoft\Crypto\RSA\MachineKeys\

对于证书1,文件在那里,但对于证书2,没有这样的文件.搜索后,我在文件夹的子文件夹中找到了证书2的%AppData%\Microsoft\Crypto\文件.这是用户特定的键而不是机器级键.令人惊讶的是,证书被导入到计算机商店中,但它总是保留用户商店的容器密钥.

我删除了AppData文件夹下的'55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b64-30f0d6589239'文件,并在商店中运行了我的证书2的修复命令:

certutil -repairstore My 2

这次,Unique容器名称反映了'%ProgramData%\ Microsoft\Crypto \'下正确文件夹中的文件,一切都开始工作了.

希望这对某人有帮助.


Fre*_*ger 19

我已经购买了官方Thawte证书,以通过我们的互联网服务器上的特定端口保护自托管(控制台应用程序)Web服务.然后我收到了Thawte证书并在我们的Internet服务器上安装了mmc(然后证书可以在"受信任的根证书颁发机构"下查看(图像上有关键图标,表明证书包含私钥是什么是强制性的)能够将它绑定到端口btw).

下一步是启用<port>for https:

netsh http add urlacl url=https://+:<port>/ user=everyone
Run Code Online (Sandbox Code Playgroud)

(什么都没有问题)

下一步是为https启用port():

netsh http add sslcert ipport=0.0.0.0:<port> certhash=<thumbprint to certificate> appid={<guid to application>}
Run Code Online (Sandbox Code Playgroud)

这已失败,并显示错误消息:
SSL证书添加失败,错误:1312指定的登录会话不存在.它可能已经被终止了.

然后我搜索了互联网并尝试了各种建议的解决方法(没有成功).

我的案例的解决方案是将netstorename = 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)>}
Run Code Online (Sandbox Code Playgroud)

注意:
如果net netsh命令没有应用certstorename,则netsh采用默认值,什么是MY(证书存储的目标:" Personal ",其中自签名证书通常存储).
Root以证书存储为目标:"受信任的根证书颁发机构"

*1):端口,您要使用连接
*2):您可以将指纹提取到证书,如果您打开证书(在Windows系统上,只需在资源管理器中双击证书) - 选择选项卡"详细信息"然后单击"指纹".然后显示"指纹"并可以复制.复制指纹并删除所有空格......
*3):作为appid,您可以采用{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}形式的任何ID,因为APPID仅提供信息.使用命令"netsh http show sslcert",您可以查询整个机器上的绑定证书,并且将看到提供信息,哪个appid绑定到哪个证书(在实践中没有真正的帮助顺便说一句)在我的情况下,我已经拿了(从VS生成)我的Web服务应用程序的GUID

  • 就我而言(在Windows Server 2016上为IIS 10),我必须设置certstorename = WebHosting,因为我已将证书导入到WebHosting证书中。存储(IIS管理器中证书存储的选项是“个人”或“ WebHosting”,因此我选择了“ WebHosting”)。 (2认同)

小智 9

我一直在与错误1312作斗争,为我修复的是将mmc中的证书导入为.p12文件而不是.crt.如果您使用OpenSSL创建它,那么在创建.crt后,请执行以下操作:

pkcs12 -export -in server.crt -inkey server.key -name “Your Name” -out server.p12
Run Code Online (Sandbox Code Playgroud)

如上所述.当您在mmc中导入它时,它将被称为"个人信息交换"文件(显然.pfx文件也可以工作).

我是新手编写服务器和处理SSL,我不知道为什么会这样,但我希望它有所帮助.


Mic*_*son 6

问题出在第 4 步。我使用根证书中的指纹作为 certhash 中的值。为了解决这个问题,我不得不回到 MMC 并刷新证书(本地计算机)-->个人-->证书文件夹。然后使用由根证书颁发机构“颁发”的证书中的指纹。


小智 6

我的情况是问题是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
Run Code Online (Sandbox Code Playgroud)

适用于CER/DER文件.


use*_*993 5

我遇到了同样的问题并使用以下命令解决了导入证书的问题:

c:> certutil -importPFX certname.pfx

现在使用以下命令显示证书:

c:> certutil -store my

在此命令之前,证书不会出现


Ama*_*hez 5

这似乎是显而易见的;不过,我认为这可以节省一些人的头痛时间。我已在我的个人证书文件夹(针对个人计算机帐户)下导入了一个扩展名为 .cer 的文件。一段时间后,我意识到我需要导入扩展名为 *.pfx 的文件。修复了这个问题,瞧\xc3\xa0!问题解决了!

\n

  • 这似乎很明显,但是当您没有意识到您需要 PFX 时...谢谢! (2认同)