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

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

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

  1. Создал сертификат на моем локальном компьютере, чтобы действовать как корневой центр сертификации
    • makecert -n “CN = My Root Certificate Authority” -r -sv RootCATest.pvk RootCATest.cer
  2. Открыл 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
  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

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

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

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

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

Вы можете легко проверить, имеет ли ваш сертификат закрытый ключ: mmccertificateslocal machinepersonal . Посмотрите на значок сертификата – он ДОЛЖЕН иметь знак на значке.

Я имел дело с этой проблемой, и я использую самообслуживаемую службу 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», и все начало работать.

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

Я борюсь с ошибкой 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, и я понятия не имею, почему это работает, но я надеюсь, что это поможет.

Я купил официальный сертификат Thawte, чтобы защитить веб-сервис самостоятельно (консольное приложение) через определенный порт на нашем интернет-сервере. Затем я получил сертификат Thawte и установил его с помощью mmc на нашем интернет-сервере (тогда сертификат был доступен для просмотра в разделе «Доверенные корневые центры сертификации» (с иконкой ключа на изображении, что показывает, что сертификат содержит закрытый ключ, что является обязательным чтобы иметь возможность привязывать его к порту btw).

Следующим шагом было включить для https:

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

(что не было проблемой)

Следующим шагом было включить порт () для https:

 netsh http add sslcert ipport=0.0.0.0: certhash= appid={} 

Ошибка с сообщением об ошибке:
Ошибка сертификата SSL, Ошибка: 1312 Указанный сеанс входа в систему не существует. Возможно, это уже было прекращено.

Затем я искал в Интернете и пробовал различные предлагаемые обходные пути (без успеха).

Решение для моего случая состояло в том, чтобы добавить certstorename = Root в команду netsh:

 netsh http add sslcert ipport=0.0.0.0: certstorename=Root certhash= appid={} 

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

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

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

Я подключил ПК с помощью этих команд 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.

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

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

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

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

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

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

c:> certutil -importPFX certname.pfx

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

c:> certutil -store my

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

Если:

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

тогда:

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

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

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

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

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

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

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

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

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

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

  C:\Windows\system32> certutil -store TRUSTEDPUBLISHER 

В этом списке несколько сертификатов, которые я установил, я затем запустил хранилище обновлений в сертификате, с которым у меня возникла проблема с установкой netsh.

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

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

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

У меня была такая же ошибка при создании самоподписанного сертификата с 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's rsa rsaPrivate.ImportParameters(rsaPriv.ExportParameters(true)); // Set private key on our X509Certificate2 x509.PrivateKey = rsaPrivate; 

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

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

   

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

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

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

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

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

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

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

  • Пользовательская обработка SSL перестала работать на Android 2.2 FroYo
  • Как решить проблему с подтверждением сертификата в Windows?
  • Java7 Отказ от доверия сертификату в хранилище доверия
  • Dyld: библиотека не загружена: /usr/lib/libcurl.4.dylib curl Ошибка SSL
  • Расшифровка трафика SSL в Wireshark. Только заголовки получают расшифровку
  • Что такое Keystore?
  • Знак предупреждения Thunderbird продолжает появляться
  • Почему некоторые веб-сайты отображают название компании рядом с URL-адресом?
  • Как исправить ошибку «java.security.cert.CertificateException: нет альтернативных имен объектов»?
  • Сертификаты клиента Java через HTTPS / SSL
  • C # Игнорировать ошибки сертификата?
  • Давайте будем гением компьютера.