Как я могу отправить пароль вместе с моим сертификатом (X.509) в Службу WCF? - PullRequest
5 голосов
/ 05 ноября 2010

У меня есть служба WCF, которая использует сертификат X.509 в качестве учетных данных клиента.Большинство этих учетных данных не требуют пароля для использования, просто для его установки.

Но теперь у нашего клиента есть сертификат, который требует ввода пароля каждый раз, когда он используется (то есть каждый разслужба работает).Эта услуга вызывает другую службу n раз в день, но не работает, если сертификат не может быть подтвержден.

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

Что я хотел бы знать, так это: можно ли ввести этот пароль в нашФайл конфигурации вместе со всей другой информацией о сертификате?

Вот часть конфигурации XML для службы:

<configuration>
  <system.serviceModel>
    <client>
      <endpoint
        address="***"
        binding="basicHttpBinding"
        bindingConfiguration="***"
        behaviorConfiguration="HTTPSEndpoint"
        contract="***"
        name="***" />
    </client>
    <bindings>
      <basicHttpBinding>
        <binding
          name="***"
          sendTimeout="00:05:00"
          maxBufferSize="2147483647"
          maxReceivedMessageSize="2147483647" >
          <readerQuotas maxStringContentLength="2147483647" />
          <security mode="Transport">
            <transport clientCredentialType="Certificate" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    <behaviors>
      <endpointBehaviors>
        <behavior name ="HTTPSEndpoint">
          <clientCredentials>
            <clientCertificate
              findValue="***"
              storeLocation="LocalMachine"
              storeName="My"
              x509FindType="FindBySubjectName"/>
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
  </system.serviceModel>
</configuration>

1 Ответ

3 голосов
/ 09 марта 2011

Требование ввести пароль при получении сертификата из хранилища сертификатов на клиентском компьютере связано с тем, что сертификат был импортирован с установленным параметром «Включить надежную защиту закрытого ключа»:

Importing a certificate to the certificate store.

Это часто устанавливается как часть стандартных процессов защиты сервера. Он предназначен для ситуаций, когда сертификат аутентифицирует пользователя в удаленной системе, когда он присутствует.

Поскольку запрос пароля связан с процессом импорта сертификатов и не является внутренним свойством сертификатов, покупка новых сертификатов ничего не изменит.

Я не знаю способа программно передать пароль в хранилище сертификатов при его получении. Однако, если вы думаете об этом, даже если вы добились успеха, вам придется каким-то образом защитить указанный пароль. Вы можете зашифровать пароль к вашему файлу .config, но теперь вам нужно сохранить ключ шифрования. И так далее ... Где-то будет свободный конец, который делает бессмысленной "надежную защиту закрытого ключа".

По сути, ваш клиент не может использовать его в обоих направлениях: он не может "включить надежную защиту закрытого ключа" и не должен вводить пароль каждый раз, когда требуется сертификат клиента. Гораздо лучше, чтобы они правильно хранили сертификат.

Для автоматической клиентской службы наиболее безопасный способ хранения клиентского сертификата заключается в следующем:

  1. Запустите службу клиента под определенной учетной записью, которая имеет криптографически надежный пароль.
  2. Удалить сертификат из хранилища LocalMachine. Сертификаты, установленные в хранилище LocalMachine, доступны для любой учетной записи, работающей на компьютере.
  3. Установите сертификат в хранилище CurrentUser учетной записи службы клиента. Это будет означать, что сертификат доступен только для учетной записи службы клиента. Когда сертификат установлен, обязательно снимите флажок «Включить надежную защиту закрытого ключа».
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...