Неверный параметр. ошибка при использовании netsh http add sslcert

Следуя инструкциям «Как настроить порт с помощью сертификата SSL» по этой ссылке: http://msdn.microsoft.com/en-us/library/ms733791.aspx, я ввел эту команду в командной строке (да):

> netsh http add sslcert ipport:10.141.146.227:7001 certhash=5d48e604007b867ae8a69260a4ad318d2c05d8ff appid={EDE3C891-306C-40fe-BAD4-895B236A1CC8}
The parameter is incorrect.

Мой certhash отпечаток был взят из сертификата в папке Сертификаты (локальный компьютер)> Личные> Сертификаты.

Создан appid GUID.

Что еще не так, что мне нужно исправить, чтобы это работало?


person Derrick    schedule 22.04.2009    source источник
comment
Полезная информация о том, как правильно вызывать внешние программы из PowerShell ... edgylogic.com/blog/powershell-and-external-commands-done-right   -  person andyb    schedule 09.03.2014
comment
Я понял это все из-за моего ЗАКАЗА! Вы должны поставить appid перед certhash. Это так глупо.   -  person Alexandru    schedule 09.07.2015
comment
Для меня скопированный certhash из диспетчера сертификатов Windows имел какой-то странный символ впереди - убедитесь, что он просто буквенно-цифровой и нет странных ведущих символов.   -  person Jacek Gorgoń    schedule 24.09.2015
comment
@ JacekGorgoń Да, и я тоже. Вероятно, пространство нулевой ширины. ????   -  person Uwe Keim    schedule 18.05.2017
comment
В моем случае я получил ошибку неверного параметра, потому что я включил значения certhash и appid в одинарные кавычки ('). После удаления одинарных кавычек все удалось.   -  person Uwe Keim    schedule 18.05.2017
comment
Для меня это были прописные буквы в отпечатке пальца ...   -  person Wifsimster    schedule 19.06.2018


Ответы (19)


В PowerShell просто введите следующее. сначала войдите в режим netsh http, а затем добавьте sslcert. У меня это сработало.

>netsh

netsh>http

netsh http>add sslcert ipport=0.0.0.0:13286 appid='{a5455c78-6489-4e13-b395-47fbdee0e7e6}' certhash=<thumprint without space>
person Abdul Hakim    schedule 10.01.2011
comment
@ abdul-hakim Я пытаюсь добавить sslcert с помощью netsh http из файла ps1 powershell, но он продолжает выдавать ошибки, когда я указываю значение GUID для appid. Вот мой код: $ guid = [guid] :: NewGuid (); netsh http add sslcert ipport = 0.0.0.0: 443 certhash = $ thumb appid = {$ guid} - person user1338998; 05.03.2013
comment
Если все выполняется полностью в командной строке PowerShell или в сценарии ps1, не забудьте указать фигурные скобки; иначе PowerShell запутается. - person codingoutloud; 08.03.2014
comment
Я понял это все из-за моего ЗАКАЗА! Вы должны поставить appid перед certhash. Это так глупо. - person Alexandru; 09.07.2015
comment
@Alexandru - и мне пришлось не только это сделать, но и удалить цитаты. Да ... тупой прав. :П - person Lars Kemmann; 16.09.2016
comment
@LarsKemmann - кавычки для powershell, без кавычек для командной оболочки - см. Ответ codingoutlouds ниже - person CJM; 19.05.2017
comment
@Alexandru, вам не нужно ставить appid перед certhash - вполне вероятно, что это случайно устранило для вас другую проблему. - person CJM; 19.05.2017
comment
Вы должны УДАЛИТЬ все кавычки вокруг appid, иначе вы получите «Параметр неверен». - person AlexPi; 22.12.2020

Другой возможной причиной этой проблемы является копирование скрытых символов со страницы диспетчера сертификатов. Если вы копируете отпечаток из окна сведений в разделе «Сертификаты», проверьте наличие скрытого символа в начале (используйте клавиши со стрелками!). Это было причиной сообщения об ошибке «Параметр неверен».

person Richard    schedule 07.10.2013
comment
Ты восхитителен. Когда есть специальный символ, появляется странная маленькая галочка. Я сначала заметил это, но ничего об этом не подумал. Просто удалили этот специальный символ и УСПЕХ. Спасибо! - person dst3p; 25.01.2017

Командная строка PowerShell и сценарии PowerShell в файлах ps1 будут думать, что фигурные скобки {...} являются директивами PowerShell. Так цитируйте их. В противном случае, как вы видели, PowerShell запутается.

Итак, вместо этого (что вы обнаружили не удалось):

netsh http add sslcert ipport:10.141.146.227:7001 certhash=5d48e604007b867ae8a69260a4ad318d2c05d8ff appid= {EDE3C891-306C-40fe-BAD4-895B236A1CC8} 

Сделайте это (обратите внимание на одинарные кавычки):

netsh http add sslcert ipport:10.141.146.227:7001 certhash=5d48e604007b867ae8a69260a4ad318d2c05d8ff appid= '{EDE3C891-306C-40fe-BAD4-895B236A1CC8}'

Вот некоторая информация о синтаксисе PowerShell с фигурными скобками:

http://danv74.wordpress.com/2012/07/12/powershell-and-the-hidden-art-of-curly-braces-and-other-braces/

person codingoutloud    schedule 08.03.2014
comment
Этот. Вы получите ту же ошибку в cmd, если вы не включите фигурные скобки в guid или если вы не укажете их в PowerShell. - person ; 28.03.2017
comment
определенно одинарные кавычки в PowerShell! - person reckface; 23.01.2019

Глядя на синтаксис команды netsh, я видел такой пример:

add sslcert ipport=1.1.1.1:443 certhash=0102030405060708090A0B0C0D0E0F1011121314 appid={00112233-4455-6677-8899-AABBCCDDEEFF}

Судя по всему, ваша проблема в том, что вы делаете

ipport:10.141.146.227:7001
      ^

в отличие от

ipport=10.141.146.227:7001
      ^
person cmptrgeekken    schedule 05.05.2009

При копировании отпечатка сертификата из Certificate \ Details \ Thumbprint к значению отпечатка добавляются байты '3f38', которые при преобразовании в ANSI отображаются как '?'. Это скрытое значение вызвало у меня проблему.

Я вставил значение в блокнот ++, выбрал «Кодирование»> «Преобразовать в ANSI», а затем вручную удалил добавленное «?». символы. Тогда я бы использовал чистый отпечаток пальца.

person Andreas Presthammer    schedule 16.09.2016

  1. Скопируйте команду в блокнот
  2. Сохраните как ANSI
  3. Закройте и снова откройте файл
  4. Удалить подделку? символы
  5. Скопируйте из блокнота в командную строку и запустите команду
person tcb    schedule 04.10.2015

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

Вот несколько причин:

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

2- Отпечаток SSL должен быть доступен в разделе «Личные» -> «Сертификаты» для работы с локальным хостом.

3-Это должно быть 'ipport =', а не 'ipport:'

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

5- GUID должен быть определен в полном формате: {a10b0420-a21f-45de-a1f8-818b5001145a}, и он должен иметь одну кавычку в PowerShell: '{a10b0420-a21f-45de-a1f8-818b5001145a}' Таким образом, формат PowerShell отличается из командной строки.

6. Сертификат SSL должен содержать полные символы со всеми заполненными нулями и без пробелов. Вы можете скопировать отпечаток пальца (будьте осторожны, чтобы удалить специальный скрытый символ) и удалить пробелы или использовать netsh http show sslcert для получения значения, если сертификат уже зарегистрирован для другого адреса.

Что у меня сработало:

Вот точная команда, которая сработала для меня в PowerShell:

netsh http add sslcert ipport=0.0.0.0:20001 certhash=5304c034548b27c72b5e9c14f0c7bdd13e52d760 appid='{a10b0420-a21f-45de-a1f8-818b5001145a}'

А вот инструкция командной строки:

netsh
http add sslcert ipport=0.0.0.0:20001 certhash=5304c034548b27c72b5e9c14f0c7bdd13e52d760 appid={a10b0420-a21f-45de-a1f8-818b5001145a}

Дополнительные команды, которые помогут избежать связанных с этим проблем:

Используйте следующую команду, чтобы увидеть текущий зарегистрированный сертификат. Вы можете найти и повторно использовать certhash или свой appid оттуда:

netsh http show sslcert

Если сертификат уже зарегистрирован с аналогичным ip и портом, вам необходимо его удалить. Я обнаружил, что это вызывает проблему с localhost, 127.0.0.1 и 0.0.0.0. Вам нужно, чтобы в вашей тестовой среде была зарегистрирована только версия 0.0.0.0. Используйте следующую команду для удаления потенциально поврежденных сертификатов:

netsh http delete sslcert ipport=0.0.0.0:20001
person mohghaderi    schedule 13.07.2017

Я тоже получал эту ошибку, когда только начинал работать с http.sys. После того, как я побежал:

netsh http add iplisten ipaddress=0.0.0.0

затем команды netsh http add sslcert начали вести себя правильно.

person Tim Danner    schedule 16.07.2009
comment
Это была моя проблема. - person x0n; 07.04.2017
comment
Похоже, это тоже помогло мне, хотя в последнее время я пробовал много разных изменений, так что не уверен ... - person Alexander; 01.06.2018

В моем случае проблема в том, что я, следуя инструкциям Microsoft, скопировал отпечаток пальца из окна SSL. дело в том, что при этом копируется непечатаемый символ в начало хэша.

Попытайтесь вставить отпечаток пальца в блокнот, а затем нажмите домой и дважды нажмите удалить (пока не будет удален первый символ из отпечатка) и повторно добавьте символ. Вы можете увидеть символ, если скопируете отпечаток пальца и вставите его в cmd:

отпечаток пальца с?

person SimSimY    schedule 21.11.2013

Я столкнулся с этим вопросом, когда искал решение проблемы. Наконец я нашел тот, который работал у меня.

Мой параметр certhash не был полностью длиной 20 байт. Мне пришлось заполнить его нулями впереди, чтобы заставить его работать.

Итак, вместо

certhash=112233445566778899aabbccddeeff00, пришлось сделать так:

certhash=00000000112233445566778899aabbccddeeff00.

Надеюсь это поможет.

person Christopher Broome    schedule 24.04.2011

Использование серийного номера вместо отпечатка пальца для параметра certhash вызовет эту ошибку из-за разницы в количестве символов. Заполнение нулями приведет к изменению ошибки на сбой добавления сертификата SSL, ошибка: 1312

person Daniel N    schedule 12.05.2015

Сэр, у вас есть ipport: вместо ipport =, что легко сделать, поскольку вы следуете за ним с помощью ip: port

Кроме того, остерегайтесь {versus ‹или (, которые тоже доставали мне в прошлом.

person GMLewisII    schedule 05.11.2014

Будьте осторожны, если у вас есть DNS-имя в качестве привязки, используйте hostnameport вместо ipport

netsh http delete sslcert hostnameport=domainame.com:443

Мне пришлось удалить привязки прокси-сервера ADFS для единого входа в Office 365.

person joelschmid    schedule 03.06.2016

я сделал несколько вещей, которые, как я думал, заставили их работать после того, как получил то же самое «Параметр неверен». Ошибка.

1) перезапустил машину и сделал это снова. это сработало с первого раза. 2) убедился, что я был в c: \, и снова введите команду после перезапуска, не сработало

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

3) я просмотрел отпечаток своего CA (не выданный сертификат сервера) и снова скопировал его из MMC, и он сработал.

после этого я снова удалил его (netsh http delete sslcert ipport = 0.0.0.0 :) и повторил процесс, используя отпечаток сертификата сервера. Проклятая штука снова сработала.

Я не знаю, просто попробуйте пройти через то же, что и я. возможно, один из них сработает. В конце концов, я подозреваю, что ввел фиктивный пробел или символ в certhash.

person Derrick    schedule 05.05.2009

Это будет работать из командной строки PowerShell:

$AppId = [Guid]::NewGuid().Guid
$Hash = "209966E2BEDA57E3DB74FD4B1E7266F43EB7B56D"

netsh http add sslcert hostname=localhost:8088 certhash=$Hash appid=`{$AppId`} certstorename my

Важные детали заключаются в том, чтобы экранировать каждый {} обратной кавычкой (`) и не пропускать имя хранилища сертификатов. В противном случае netsh выдаст ошибку 87.

Переменные просто для удобства.

person PeterXX    schedule 18.06.2017
comment
Спасибо за это! В моем тестировании ipport= вполне нормально работал, а hostnameport= - нет. Добавление certstore=my исправило hostnameport= случай. Странный! :-) - person Nicholas Blumhardt; 22.06.2017
comment
Вы имеете в виду $AppId вместе с $Guid? - person Michael Blake; 23.06.2017

Знаки «-» НЕ имеют значения. Если ваш guid не выглядит точно так, вы получите ошибку неверного параметра: {EDE3C891-306C-40fe-BAD4-895B236A1CC8} vs. EDE3C891306C40feBAD4895B236A1CC8 -> НЕПРАВИЛЬНО {EDE3C891306C40feBAD4895B236} --A1CC

Также я использую руководство для приложения IIS, а не случайное.

person Martin Clemens Bloch    schedule 20.09.2013

Должно быть, я испортил отношения между VS и IIS Express, удалив сертификат localhost. Я действительно застрял. Приложение не запускалось, и я ничего не мог сделать, казалось, чтобы исправить это отключение (которое, прежде всего, привело меня к этой теме).

Я, наконец, смог решить эту проблему, изменив назначенный порт на URL-адресе без SSL (launchSettings.json в приложениях .NET Core) и сняв флажок Включить SSL в настройках проекта и начав все сначала. . Затем я смог добавить свой недавно созданный сертификат с помощью этой команды: netsh http add sslcert ipport=0.0.0.0:44392 appid={214124cd-d05b-4309-9af9-9caa44b2b74b} certhash=A0ADC1A1002F288CCFA96261F9F352D28C675A90.

Также обратите внимание, что переменная appid не является отражением вашего AppID проекта VS (или, по крайней мере, это не обязательно). Согласно Скотту Хансельманну, это просто произвольный GUID:

AppId на самом деле не имеет значения, это просто GUID. Это сообщает HTTP.SYS, что мы используем этот сертификат.

Для меня это было неочевидно, и работа с ошибкой параметр неверен стала еще более непонятной.

Если вы столкнулись с подобными проблемами, удачи. Я верю в тебя. Напишите мне, если вы чувствуете себя потерянным и одиноким. Может, к тому времени я что-нибудь вспомню! : D

person Vinney Kelly    schedule 05.07.2017

Было бы полезно добавить мою резолюцию в эту ветку:

Я пытался добавить ippport с параметром hostnameport, поэтому у меня возникла ошибка этого параметра.

netsh http add sslcert hostnameport="10.0.0.120:443"

Вместо :

netsh http add sslcert ipport="10.0.0.120:443"

Ця!

person Nicolas Leucci    schedule 16.11.2017

У меня была скрытая проблема, которая отображалась только в PowerShell, а не в командной строке.

Я скопировал отпечаток пальца из сертификата и удалил все пробелы в блокноте ++, но перед ним все еще был скрытый символ.

выглядело так .. certhash = dca41243 ... на самом деле было .. certhash = special chardca41243 ...

person Tommy G.    schedule 08.04.2021