Я использую EPP (Extensible Provisioning Protocol) для выполнения операций регистрации домена.
Все работает нормально, но когда я использую сертификат, происходит сбой запроса на вход.
Допустим, у меня есть сертификат в C:\Folder\epp.crt
и я использую следующий код:
var tcpTransport = new TcpTransport(url, port, new X509Certificate("C:\Folder\epp.crt"), true);
var service = new Service(tcpTransport);
service.Connect();
Этот код выполняется просто отлично, и служба подключена. Это означает, что соединение с URL-адресом устанавливается с использованием сертификата. Теперь я пытаюсь войти с помощью:
service.Execute(logingCmd);
Но это дает мне «Сервер требует проверки сертификата клиента, сертификат клиента не предоставлен».
Почему? Должен ли быть какой-либо флаг для сертификата в команде входа в систему?
Согласно RFC5734, EPP использует TLS, а не TCP. Этот RFC также предписывает использование клиентских сертификатов.
В вашем вопросе отсутствуют подробности о содержании epp.crt
(где находится соответствующий ключ?) или используемом вами языке. Согласование TLS, включая проверку сертификата клиента, происходит до входа в систему EPP, но точный момент может быть скрыт библиотекой, которую вы используете для подключения.
Итак, чтобы ответить на ваш вопрос «Должен ли быть какой-либо флаг для сертификата в команде входа в систему?», Нет, не должен, поскольку обработка сертификата является частью настройки транспорта, а не команд EPP. Ваша проблема, вероятно, больше связана с использованием TcpTransport
.
Вы можете использовать сетевой сниффер, чтобы увидеть, что именно происходит. Реестры, вероятно, пока не предлагают TLS1.3, поэтому вы все равно сможете видеть обмены TLS, включая ваш клиент, предоставляющий сертификат.
Также вам может помочь реестр, к которому вы подключаетесь.
«Сертификат не был связан с каким-либо закрытым ключом». Технически это невозможно. Сертификат — это, по сути, открытый ключ с некоторыми метаданными и подписью над ним. Открытая и закрытая части ключа вычисляются одновременно в одном месте, потому что они математически связаны. Иными словами: у вас должен быть закрытый ключ, если у вас есть сертификат, иначе он не был бы сгенерирован. Но, конечно, вы также можете просто потерять закрытый ключ постфактум, и тогда свободный сертификат бесполезен.
Проблема заключалась в том, где с соответствующим ключом. Сертификат не был связан ни с одним закрытым ключом. Проблема решена путем повторного создания сертификата с закрытым ключом.