Не удалось добавить сертификат 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
-
Создал временный сертификат службы из подписанного корневого центра сертификации
- javax.net.ssl.SSLException: Получено фатальное предупреждение: protocol_version
- Получено фатальное предупреждение: handshake_failure через SSLHandshakeException
- Использование JavaMail с TLS
- Ошибка «Нет равных сертификатов» в Android 2.3, но НЕ в 4
- Как отключить предупреждение ненадежного соединения Firefox с использованием Selenium?
- 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
Указанный сеанс входа в систему не существует. Возможно, это уже было прекращено.
Кто-нибудь знает, почему я могу получить эту ошибку?
- Динамические изображения, переданные через HTTPS, отображают сломанное изображение в слове при открытии HTTP-документа
- Trust Store vs Key Store - создание с помощью keytool
- Использование настраиваемого хранилища доверия в Java, а также значение по умолчанию
- html5 Websocket с SSL
- Как установить: OpenSSL + WAMP
- Принять самоподписанный сертификат ssl сервера в Java-клиенте
- Как создать самозаверяющий сертификат для доменного имени для разработки?
- curl: (60) SSL-сертификат: не удалось получить сертификат локального эмитента
У меня была такая же ошибка. В первый раз, когда Микель сказал, мне пришлось переместить сертификат в папку Сертификаты (локальный компьютер) -> Личный -> Сертификат. У меня была такая же ошибка, когда я импортировал тот же сертификат на другой компьютер. Причина заключалась в том, что я использовал 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
Вы можете легко проверить, имеет ли ваш сертификат закрытый ключ: mmc
– certificates
– local machine
– personal
. Посмотрите на значок сертификата – он ДОЛЖЕН иметь знак на значке.
Я имел дело с этой проблемой, и я использую самообслуживаемую службу 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
перед этой командой сертификат не появляется
Если:
- у вас не было IIS на вашем компьютере (скажем, с самодостаточным WCF), и
- вы сделали свой запрос на сертификацию на другой машине с помощью диспетчера IIS (потому что вы не понимали, что закрытый ключ исходит от шифров, встроенных в запрос cert, а позже выпущенного
.pb7
)
тогда:
- просто
.pb7
установку.pb7
на машине IIS, которую вы использовали для запроса сертификата (локальный компьютер / личный / сертификат – с использованием mmc); - экспортировать сертификат с этого устройства, включая его закрытый ключ (назначить пароль); а также
- установите его с помощью 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. Даже если управление сертификатами показывает, что у меня есть закрытый ключ.
Я мог бы решить проблему только путем повторного выдачи нового сертификата (без опции продления). Затем это сработало с первой попытки.
Возможно, это поможет кому-то, кто также попробовал вариант продления.