Назад | Перейти на главную страницу

создание клиентских сертификатов

У меня есть сертификат SSL от стороннего центра сертификации. Это .cer файл. Сертификат установлен и правильно работает в IIS7.

Сертификат отображает его предполагаемые цели как проверка подлинности сервера и проверка подлинности клиента.

Сайт требует аутентификации через клиентские сертификаты. Мы не используя сопоставление сертификатов клиента, но просто используя сертификаты клиента как меру аутентификации - если он у вас есть, вы аутентифицированы.

Аутентификация сертификата клиента в IIS (или большинстве HTTPD) несколько сложна. Вы должны сопоставить пользователей с сертификатом. Сами сертификаты могут быть выпущены любым центром сертификации, которому доверяет сервер; ты можешь настроить экземпляр AD CS выдавать сертификаты или даже использовать локальную копию OpenSSL для создания сертификатов, если хотите.

Есть статья о IIS.net описание Сопоставление сертификатов клиента; с информацией о его включении и программном связывании сертификатов с пользователями.

Редактировать:
Ультракороткая версия выдачи клиентских сертификатов с помощью OpenSSL.

  1. openssl genrsa -des3 -out my_ca.key 4096
  2. openssl req -new -key my_ca.key -out my_ca.csr
  3. openssl x509 -req -days 365 -in my_ca.csr -signkey my_ca.key -out my_ca.crt
    Теперь у вас есть сертификат и ключ CA.
  4. Для каждого из клиентских сертификатов, которые вы сгенерируете, вам понадобится запрос на подпись сертификата. Вы можете использовать один и тот же сертификат для каждого пользователя, если хотите, хотя это не особенно хорошая идея, и вам обязательно потребуется какая-то другая форма аутентификации (например, пароль). Либо клиенты могут сами генерировать CSR, либо вы можете снова использовать openssl (обратите внимание, что каждому CSR сначала нужен закрытый ключ):
    openssl genrsa -des3 -out client1.key 1024
    openssl req -new -key client1.key -out client1.csr
  5. Отредактируйте файл openssl.cnf и заполните соответствующие части CA. Они есть:

    [ ca ]
    default_ca      = CA_default            # The default ca section
    
    [ CA_default ]
    dir            = ./                    # top dir
    database       = $dir/my_ca.index      # index file.
    new_certs_dir  = $dir/newcerts         # new certs dir
    certificate    = $dir/my_ca.crt        # The CA cert
    serial         = $dir/my_ca.srl        # serial no file
    private_key    = $dir/my_ca.key        # CA private key
    RANDFILE       = $dir/rand             # random number file
    default_days   = 365                   # how long to certify for
    default_crl_days= 30                   # how long before next CRL
    default_md     = md5                   # md to use
    policy         = policy_any            # default policy
    email_in_dn    = no                    # Don't add the email into cert DN
    name_opt       = ca_default            # Subject name display option
    cert_opt       = ca_default            # Certificate display option
    copy_extensions = none                 # Don't copy extensions from request
    
    [ policy_any ]
    countryName            = supplied
    stateOrProvinceName    = optional
    organizationName       = optional
    organizationalUnitName = optional
    commonName             = supplied
    emailAddress           = optional
    
  6. Подпишите ключ с помощью сертификата CA
    openssl ca -in client1.csr -out client1.crt

  7. Если вы создали ключ и CSR для клиента, вам необходимо их экспортировать. Экспортируйте пару сертификатов в файл PKCS12, чтобы клиент мог ее импортировать.
    openssl pkcs12 -export -in client1.crt -inkey client1.key -out client1.p12
  8. Если вы выполнили №7, отправьте клиенту созданный вами файл PKCS12; в противном случае отправьте им Сертификат №6.

Обратите внимание, что это плохой способ выдавать подписанные сертификаты, потому что он просто предоставляет любой тип сертификата, указанный CSR. Обязательно обращайте внимание на то, что вы делаете. Если вы собираетесь выпустить много сертификатов, вам нужно потратить некоторое время на более безопасную настройку.