Не удалось добавить сертификат SSL при привязке к порту
Я создал WebService, используя WCF. Я занимаюсь самостоятельным хостингом, и я хочу включить HTTPS. Из моего понимания, чтобы это произошло, мне нужно создать сертификат и привязать к порту, который я хочу использовать.
Вот шаги, которые я сделал для этого:
Результатом этапа 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
В моем случае у меня отсутствует секретный ключ сертификата .