2016-11-19 3 views
1

У меня есть два очень похожих самоподписанных сертификата, созданных двумя разными способами.Открывает ли opensl самоподписанные сертификаты без основных ограничений?

Чтобы проверить их у меня есть:

  1. Добавлена ​​запись в моих хозяев файл для local.mydomain.com
  2. Настройка сервера Nginx для прослушивания этого домена на порт 443 с сертификатом испытываемой плюс соответствующий закрытый ключ (я тогда переключить серт и перезапустить Nginx для сравнения)
  3. Подключен к Nginx с openssl s_client -connect local.mydomain.com -CAfile /path/to/the/ca/cert.pem

Один сертификат не удается:

CONNECTED(00000003) 
depth=0 CN = local.mydomain.com 
verify error:num=20:unable to get local issuer certificate 
verify return:1 
depth=0 CN = local.mydomain.com 
verify error:num=21:unable to verify the first certificate 
verify return:1 
--- 
Certificate chain 
0 s:/CN=local.mydomain.com 
    i:/CN=local.mydomain.com 
--- 

Один сертификат преуспевает:

CONNECTED(00000003) 
depth=0 CN = local.mydomain.com 
verify return:1 
--- 
Certificate chain 
0 s:/CN = local.mydomain.com 
    i:/CN = local.mydomain.com 
--- 

Я сравниваю детали сертификатов с openssl x509 -in /path/to/the/ca/cert.pem -text -noout

неисправного серт:

Certificate: 
    Data: 
     Version: 3 (0x2) 
     Serial Number: 
      47:dc:02:c7:11:fc:8e:96:45:22:aa:6b:23:79:32:ca 
    Signature Algorithm: sha256WithRSAEncryption 
     Issuer: CN=local.mydomain.com 
     Validity 
      Not Before: Nov 18 11:55:31 2016 GMT 
      Not After : Nov 18 12:15:31 2017 GMT 
     Subject: CN=local.mydomain.com 
     Subject Public Key Info: 
      Public Key Algorithm: rsaEncryption 
       Public-Key: (2048 bit) 
       Modulus: 
        <stuff> 
       Exponent: 65537 (0x10001) 
     X509v3 extensions: 
      X509v3 Key Usage: critical 
       Digital Signature, Key Encipherment 
      X509v3 Extended Key Usage: 
       TLS Web Client Authentication, TLS Web Server Authentication 
      X509v3 Subject Alternative Name: 
       DNS:local.mydomain.com 
      X509v3 Subject Key Identifier: 
       6D:4F:AF:E4:60:23:72:E5:83:27:91:7D:1D:5F:E9:7C:D9:B6:00:2A 
    Signature Algorithm: sha256WithRSAEncryption 
     <stuff> 

Рабочий серт:

Certificate: 
    Data: 
     Version: 3 (0x2) 
     Serial Number: 
      9b:6b:3d:a3:b9:a3:a4:b4 
    Signature Algorithm: sha256WithRSAEncryption 
     Issuer: CN=local.mydomain.com 
     Validity 
      Not Before: Nov 19 13:27:30 2016 GMT 
      Not After : Nov 19 13:27:30 2017 GMT 
     Subject: CN=local.mydomain.com 
     Subject Public Key Info: 
      Public Key Algorithm: rsaEncryption 
       Public-Key: (2048 bit) 
       Modulus: 
        <stuff> 
       Exponent: 65537 (0x10001) 
     X509v3 extensions: 
      X509v3 Subject Key Identifier: 
       03:E7:DA:AA:2E:CC:23:ED:C5:07:3D:E1:33:86:F5:22:D4:76:EB:CB 
      X509v3 Authority Key Identifier: 
       keyid:03:E7:DA:AA:2E:CC:23:ED:C5:07:3D:E1:33:86:F5:22:D4:76:EB:CB 

      X509v3 Basic Constraints: 
       CA:TRUE 
    Signature Algorithm: sha256WithRSAEncryption 
     57<stuff> 

Глядя на это, наиболее очевидная разница заключается в том, что рабочий сертификат имеет CA:TRUE под номером X509v3 Basic Constraints. Тем не менее, от чтения по сети, я был под впечатлением, что самоподписывающемуся не были сертификаты предназначены быть УЦ, в частности, это говорит, что они, как правило, не будет:

https://security.stackexchange.com/questions/44340/basic-self-signed-certificate-questions

Ответ там говорит, что, будучи самозаверяющий не участвует в CA. Но, возможно, openssl требует, чтобы самоподписанные сертификаты имели такой набор?

+2

Лучшим сайтом для запроса этого вопроса может быть security.stackexchange.com. –

+0

OK Я тоже попробую там, спасибо! – junichiro

+0

Существует два типа сертификатов. Сначала это сертификаты CA. Сертификаты CA могут выдавать другие сертификаты. Они сигнализируются с помощью 'Basic Constraint CA = Yes'. Второй - сертификат конечного объекта. Сертификаты конечных объектов - это сертификаты сервера и клиента. Это листовые сертификаты. Сертификат A * Self-Signed * является сертификатом, в котором * Эмитент = Тема *, * Идентификатор ключа полномочий = Идентификатор открытого ключа субъекта * и т. Д. Это означает, что он означает самозапись. Как сертификат конечной сущности, так и сертификат ЦС могут быть самоподписаны. Когда его CA, он обычно называется * Root CA *. – jww

ответ

1

Из моих собственных экспериментов я могу подтвердить, что вы видите. Мое объяснение поведения заключается в том, что самоподписанный сертификат по-прежнему является сертификатом, подписанным эмитентом, даже если сертификат эмитента является самим сертификатом. Но только сертификаты CA могут использоваться для подписывания сертификатов, то есть именно это ограничение CA: true позволяет. Это означает, что самозаверяющий сертификат также должен быть сертификатом CA с ограничением CA: true.

0

RFC5280 говорит:

The CA boolean indicates whether the certified public key may be used to verify certificate signatures.

Таким образом, если сертификат не имеет CA:TRUE флаг, этот сертификат не может быть использован для проверки подписи на сертификатах, в том числе и себя. OpenSSL правильно следует RFC.

Неправильно полагать, что сертификат относится к одному из двух типов: «сертификат CA» или «сертификат конечного объекта». Сертификат с CA:TRUE может использоваться для аутентификации объекта. Это именно то, что вы делаете, когда выполняете аутентификацию с помощью самозаверяющего сертификата. Это может быть также сертификат с CA:TRUE, подписанный кем-то другим.

Смежные вопросы