Практическое руководство. Создание временных сертификатов для использования во время разработки

При разработке безопасной службы или клиента с помощью Windows Communication Foundation (WCF) часто необходимо предоставить сертификат X.509 для использования в качестве учетных данных. Обычно этот сертификат является частью цепи сертификатов, корневой центр которых находится в хранилище «Доверенные корневые центры сертификации» на компьютере. Наличие цепи сертификатов позволяет ограничить набор сертификатов, корневой центр которых, как правило, принадлежит организации или подразделению. Для эмуляции этого во время разработки можно создать два сертификата, чтобы выполнить требования безопасности. Первый сертификат является самозаверяющим и помещается в хранилище «Доверенные корневые центры сертификации». Второй сертификат создается из первого и помещается как в хранилище «Личное» на локальном компьютере, так и в хранилище «Личное» текущего пользователя. В этом разделе описаны действия по созданию этих двух сертификатов с помощью командлета PowerShell New-SelfSignedCertificate .

Внимание

Сертификаты, создаваемые командлетом New-SelfSignedCertificate, предоставляются только для тестирования. При развертывании службы или клиента убедитесь, что используется соответствующий сертификат, предоставленный центром сертификации. Это может быть либо сервер сертификатов Windows Server в вашей организации, либо сторонний поставщик.

По умолчанию командлет New-SelfSignedCertificate создает сертификаты, которые являются самозаверяющими, и эти сертификаты небезопасны. Размещение самозаверяющих сертификатов в хранилище доверенных корневых центров сертификации позволяет создавать среду разработки, которая более тесно имитирует среду развертывания.

Дополнительные сведения о создании и использовании сертификатов см. в статье "Работа с сертификатами". Дополнительные сведения об использовании сертификата в качестве учетных данных см. в разделе "Защита служб и клиентов". Руководство по использованию технологии Microsoft Authenticode см. в разделе, посвященном общим сведениям и учебникам по Authenticode.

Создание самозаверяющего сертификата корневого центра и экспорт закрытого ключа

Следующая команда создает самозаверяющий сертификат с именем субъекта RootCA в текущем хранилище user Personal.

$rootCert = New-SelfSignedCertificate -CertStoreLocation Cert:\CurrentUser\My -DnsName "RootCA" -TextExtension @("2.5.29.19={text}CA=true") -KeyUsage CertSign,CrlSign,DigitalSignature

Необходимо экспортировать сертификат в PFX-файл, чтобы его можно было импортировать в место, где он необходим позже. При экспорте сертификата с закрытым ключом требуется пароль для его защиты. Мы сохраняем пароль в файле SecureString PFX и используем командлет Export-PfxCertificate для экспорта сертификата с соответствующим закрытым ключом. Мы также сохраняем только открытый сертификат в CRT-файл с помощью командлета Export-Certificate .

[System.Security.SecureString]$rootCertPassword = ConvertTo-SecureString -String "password" -Force -AsPlainText
[String]$rootCertPath = Join-Path -Path 'cert:\CurrentUser\My\' -ChildPath "$($rootCert.Thumbprint)"
Export-PfxCertificate -Cert $rootCertPath -FilePath 'RootCA.pfx' -Password $rootCertPassword
Export-Certificate -Cert $rootCertPath -FilePath 'RootCA.crt'

Создание нового сертификата, подписанного сертификатом корневого центра

Следующая команда создает сертификат, подписанный именем RootCA субъекта "SignedByRootCA" с помощью закрытого ключа издателя.

$testCert = New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -DnsName "SignedByRootCA" -KeyExportPolicy Exportable -KeyLength 2048 -KeyUsage DigitalSignature,KeyEncipherment -Signer $rootCert

Аналогичным образом мы сохраняем подписанный сертификат с закрытым ключом в PFX-файл и просто открытый ключ в CRT-файл.

[String]$testCertPath = Join-Path -Path 'cert:\LocalMachine\My\' -ChildPath "$($testCert.Thumbprint)"
Export-PfxCertificate -Cert $testCertPath -FilePath testcert.pfx -Password $rootCertPassword
Export-Certificate -Cert $testCertPath -FilePath testcert.crt

Установка сертификата в хранилище «Доверенные корневые центры сертификации»

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

Установка самозаверяющего сертификата в хранилище «Доверенные корневые центры сертификации»

  1. Откройте оснастку сертификата. Дополнительные сведения см. в разделе Практическое руководство. Просмотр сертификатов с помощью оснастки MMC.

  2. Откройте папку, чтобы сохранить сертификат: Локальный компьютер либо Текущий пользователь.

  3. Откройте папку Доверенные корневые центры сертификации .

  4. Щелкните правой кнопкой мыши папку Сертификаты , выберите пункт Все задачи, а затем выберите Импортировать.

  5. Следуйте инструкциям мастера на экране, чтобы импортировать RootCA.pfx в магазин.

Использование сертификатов с WCF

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

Задание сертификата как типа учетных данных клиента

  1. В файле конфигурации для службы используйте следующий XML, чтобы настроить режим безопасности сообщения и задать тип учетных данных клиента для сертификата.

    <bindings>
      <wsHttpBinding>
        <binding name="CertificateForClient">
          <security>
            <message clientCredentialType="Certificate" />
          </security>
        </binding>
      </wsHttpBinding>
    </bindings>
    
  2. В файле конфигурации для клиента используйте следующий XML-код, чтобы указать, что сертификат найден в хранилище пользователя, и его можно найти, выполнив поиск в поле SubjectName для значения CohoWinery.

    <behaviors>
      <endpointBehaviors>
        <behavior name="CertForClient">
          <clientCredentials>
            <clientCertificate findValue="CohoWinery" x509FindType="FindBySubjectName" />
          </clientCredentials>
        </behavior>
      </endpointBehaviors>
    </behaviors>
    

Дополнительные сведения об использовании сертификатов в WCF см. в разделе Working with Certificates.

безопасность платформы .NET Framework

Не забудьте удалить любые временные сертификаты корневого центра из папки Доверенные корневые центры сертификации и папки Личное , щелкнув правой кнопкой мыши сертификат и выбрав Удалить.

См. также