Не удалось добавить сертификат SSL при привязке к порту

Я создал WebService, используя WCF. Я занимаюсь самостоятельным хостингом, и я хочу включить HTTPS. Из моего понимания, чтобы это произошло, мне нужно создать сертификат и привязать к порту, который я хочу использовать.

Вот шаги, которые я сделал для этого:

  • Создал сертификат на моей локальной машине, чтобы действовать в качестве корневого центра сертификации
    • makecert -n "CN = My Root Certificate Authority" -r -sv RootCATest.pvk RootCATest.cer
  • Открыл файл MMC.exe и импортировал сохраненный файл .cer в папку "Trusted Root Certificate\Certificates"
    • makecert -sk MyKeyName -iv RootCATest.pvk -n "CN = MyMachineName" -ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe MyMachineName.cer
  • Создал сертификат временной службы из подписанного корневого центра сертификации

    • makecert -sk MyKeyName -iv RootCATest.pvk -n "CN = MyMachineName" -ic RootCATest.cer -sr localmachine -ss my -sky exchange -pe MyMachineName.cer
  • Попробовал привязать сертификат к номеру порта (443 в этом случае)

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

Результатом этапа 4 является следующая ошибка:

Ошибка сертификата SSL, ошибка 1312

Указанный сеанс входа в систему не существует. Возможно, оно уже завершено.

Кто-нибудь знает, почему я могу получить эту ошибку?

Ответ 1

У меня была такая же ошибка. В первый раз, когда Микель сказал, мне пришлось переместить сертификат в папку Сертификаты (локальный компьютер) → Личный → Сертификат. У меня была такая же ошибка, когда я импортировал тот же сертификат на другой компьютер. Причина заключалась в том, что я использовал certmgr.msc для импорта сертификата., В открывшемся окне отображается "Сертификаты - текущий пользователь". Сертификаты, импортированные с помощью этого окна, приводят к сбою netsh с ошибкой 1312. Обязательно используйте оснастку сертификатов в MMC для импорта сертификатов. В оснастке сертификатов с MMC отображается "Сертификаты (локальный компьютер)". Это позволяет выполнить netsh.

Ответ 2

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. Посмотрите на значок сертификата - он ДОЛЖЕН иметь знак ключа на значке.

Ответ 3

Я имел дело с этой проблемой, и я использую самообслуживаемую службу WCF. Я только что сделал прорыв:

У меня был сертификат в папке с персоналом для магазина Machine. Это истекло, и мой менеджер выпустил новый. Новая ошибка для меня с этой ошибкой. Я много раз пробовал у Google, но, в конце концов, решил проблему, используя совершенно другое решение.

Я установил оба сертификата - истекший и новый. Затем я использовал эту команду, чтобы получить их список:

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 выходит из строя с ошибкой 1312.

Ключевым отличием, которое меня озадачило, было свойство Уникальное имя контейнера. Он должен представлять физический файл ключа на жестком диске в %ProgramData%\Microsoft\Crypto\RSA\MachineKeys\

Для сертификата 1 файл был там, но для сертификата 2 такого файла не было. После поиска я нашел файл с сертификатом 2 в подпапке папки %AppData%\Microsoft\Crypto\. Эти пользовательские ключи не являются клавишами уровня машины. Удивительно, что сертификат импортируется в хранилище компьютеров, но он всегда хранит ключ контейнера в магазине пользователя.

Я удалил файл '55edfcc149408fb990a3bacd6d31126b_3277b2c9-9894-46d0-9b64-30f0d6589239' в папке AppData и выполнил команду восстановления для моего сертификата 2 в хранилище:

certutil -repairstore My 2

На этот раз имя уникального контейнера отобразило файл в соответствующей папке в разделе "% ProgramData%\Microsoft\Crypto", и все началось.

Надеюсь, это кому-то поможет.

Ответ 4

Я купил официальный официальный сертификат Thawte, чтобы защитить веб-службу собственного хоста (консольного приложения) через определенный порт на нашем интернет-сервере. Затем я получил сертификат Thawte и установил его с помощью 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)>}

Примечания:
Если для команды net netsh применяется no certstorename, netsh принимает значение по умолчанию, то есть MY (что указывает на хранилище сертификатов: " Личное", где самоподписанные сертификаты хранятся в обычном режиме).
Корень нацелен на хранилище сертификатов: "Доверенные корневые центры сертификации"

* 1): порт, вы хотите использовать соединение
* 2): вы можете извлечь отпечаток в сертификат, если вы откроете сертификат (в системе Windows просто дважды щелкните сертификат в проводнике) - выберите вкладку "Сведения" и нажмите "Отпечаток". Затем отображается "отпечаток" и может быть скопирован. Скопируйте Thumbprint и удалите все пробелы...
* 3): В качестве приложения вы можете использовать любой идентификатор в форме {xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}, поскольку APPID является только информативным. С помощью команды "netsh http show sslcert" вы можете запросить связанные сертификаты на всей машине, и она увидит информативное, какое приложение связано с каким сертификатом (на самом деле это не очень полезно на практике b.t.w.) В моем случае я взял (из VS сгенерированного) GUID в мое приложение веб-службы

Ответ 5

Я борюсь с ошибкой 1312 весь день, что исправлено для меня было импортировать сертификат в mmc как .p12 файл, а не в .crt. Если вы создаете его с помощью OpenSSL, то после создания .crt выполните:

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

Как описано. Когда вы перейдете на импорт в mmc, это будет вызванный файл "Personal Information Exchange" (и, видимо, будет работать и файл .pfx).

Я новичок в написании серверов и работе с SSL, и я понятия не имею, почему это работает, но я надеюсь, что это поможет.

Ответ 6

В моем случае проблема заключалась в том, что файл CER не имеет закрытого ключа.

Я подключил PK, используя эти команды OpenSSL:

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

Работает для файлов CER/DER.

Ответ 7

Проблема была на этапе 4. Я использовал Thumbprint из корневого сертификата для значения в certhash. Чтобы решить эту проблему, мне пришлось вернуться в MMC и обновить папку сертификатов (локальный компьютер) → Personal → Certificate. Затем используйте "Отпечаток" из сертификата, который "выдан" Корневым центром сертификации.

Ответ 8

Существует несколько способов получения этой ошибки (см. выше для других ответов).

Другой способ получить эту конкретную ошибку - попытаться привязать сертификат к порту, когда сертификат не находится в соответствующем хранилище.

Убедитесь, что сертификат хранится в хранилище Root LocalMachine (вы можете использовать certutil или certmgr.exe из командной строки, чтобы сбрасывать его правильно).

обновленная грамматика:)

Ответ 9

У меня была та же проблема и я решил импортировать сертификат с помощью этой команды:

c:> certutil -importPFX certname.pfx

Теперь сертификат появляется с помощью этой команды:

c:> certutil -store my

перед этой командой сертификат не отображается

Ответ 10

Если:

  • у вас не было IIS на вашем компьютере (работает с самодостаточным WCF, скажем) и
  • вы сделали свой запрос сертификата на другой машине с помощью диспетчера IIS (потому что вы не понимали, что секретный ключ исходит от шифров, встроенных в запрос cert, а позже выпущенного .pb7)

то

  • просто запустите установку .pb7 на машине IIS, которую вы использовали для запроса сертификата (локальная машина/личная/сертификация - с использованием mmc);
  • экспортировать сертификат с этого компьютера, включая его закрытый ключ (назначить пароль); и
  • установите его с помощью mmc на сервере WCF (локальный компьютер/персональный/сертификат - с помощью mmc).

Затем netsh позволит вам привязываться к порту 443. Не более 1312 ошибок.

Ответ 11

Просто, чтобы выпустить еще один ответ на ринг, это проблема, которую я имел:

Хотя я импортировал свой сертификат в хранилище сертификатов (Local Computer)\..., я импортировал его в раздел Trusted Root Certification Authorities. Мне нужно было импортировать его в раздел Personal, иначе эта ошибка произошла.

Ответ 12

Это может показаться очевидным; однако, я думаю, что это может спасти кого-то время царапин на голове. Я импортировал файл с расширением .cer в папку личных сертификатов (для учетной записи персонального компьютера). Через некоторое время я понял, что мне нужно импортировать файл с расширением *.pfx. Исправлено это и вуаля! Проблема решена!

Ответ 13

Если кто-то еще сталкивается с этой проблемой, и ответы здесь явно не отвечают на нее, основная проблема заключается в том, что частный ключ необходимо импортировать. Если вы не помечаете сертификат как экспортируемый при его импорте, закрытый ключ не импортируется, и вы не можете его привязать. Если вы удалите его и повторно импортируете и пометите его как экспортируемую, то он будет работать.

Он также должен быть локальным хранилищем, как указывали другие.

Ответ 14

У меня была такая же проблема, хотя в моем .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....'.

Ответ 15

Аргумент certstorename должен быть строковым значением StoreName перечисления из пространства имен .net framework System.Security.Cryptography.X509Certificates.

Ответ 16

Я работаю над этим часами и в основном читаю, что сказал @DoomerDGR8, но мое исправление было намного проще. Я побежал

 C:\Windows\system32> certutil -store TRUSTEDPUBLISHER

Здесь перечислены несколько сертификатов, которые я установил, затем я запустил магазин восстановления в сертификате, с которым у меня возникла проблема с установкой netsh.

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

Число 6 в конце представляет индекс вашего сертификата, найденный в магазине, надеюсь, что это поможет

Ответ 17

В моем случае при создании сертификата я выбрал другое имя, чем "Мой" для моего имени в магазине. По умолчанию используется значение MY. Поэтому, если у вас другое, добавьте certstorename = Ваше предоставленное имя хранилища в команду.

Ответ 18

У меня была такая же ошибка при создании самоподписанного сертификата с OpenSSL (BouncyCastle), я разрешил его с помощью этого сообщения: Невозможно экспортировать сгенерированный сертификат с закрытым ключом в массив байтов в .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 rsa
        rsaPrivate.ImportParameters(rsaPriv.ExportParameters(true));

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

Ответ 19

Итак, добавьте (еще) исправление/ситуацию.

У меня был код С#, который использовал BouncyCastle для создания самозаверяющих сертификатов.

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

Итак, мой код создал сертификаты и поместил их в правильные места в Cert-Store.

Используя подсказки здесь, моя установка On Service Service Bus 1.1 не срабатывала... и это привело меня сюда.

Я закончил УДАЛЕНИЕ обоих сертификатов, созданных моим кодом BouncyCastle (из хранилища сертификатов) и реимпортацией их (с закрытыми ключами).... и все это сработало. Я импортировал FIRST в

Сертификаты (локальный компьютер)/Персональные/сертификаты

затем я скопировал вставку (в mmc) в любые другие места (магазины), в которых я нуждался.

Мои "до" и "после" выглядели точно так же из моих глаз в MMC, НО это исправляло проблему. Наведите указатель мыши.

Ответ 20

У меня была еще одна ошибка. Я обновил сертификат expired для нашей службы WorkFolders из нашего центра сертификации, используя тот же секретный ключ. Затем я всегда получал сообщение об ошибке 1312. Даже если управление сертификатами показывает, что у меня есть закрытый ключ.
Я мог бы решить проблему только путем повторного выдачи нового сертификата (без опции продления). Затем это сработало с первой попытки.
Возможно, это поможет кому-то, кто также попробовал вариант продления.

Ответ 21

В моем случае у меня отсутствует секретный ключ сертификата .