Как я могу проверять/читать обновление IIS7 SSL CSR с OpenSSL

Трудно наследовать полномочия родительского каталога в Linux/UNIX, не используя ACLs., но существует способ присвоить полномочия файла по умолчанию, проверить ссылку рева

Можно ли наследовать полномочия родительского каталога.

10
задан 3 October 2011 в 05:05
2 ответа

Структура этого запроса на обновление IIS7 на самом деле довольно элегантна. Кажется, это исходит из предпосылки, что, поскольку это запрос на обновление текущего сертификата, он должен доказать, что запрос исходит от правильного хоста, то есть хоста, который фактически использует текущий сертификат. & Владеет связанным закрытым ключом. В мире Интернета

  • Данные PKCS # 7
    • Данные PKCS # 10 (обычный CSR)
  • Обычный сертификат сервера
  • Выдача данных CA
  • Подпись RSA (я предполагаю)

Используйте openssl asn1parse -in iis7rcsr -i чтобы увидеть структуру файла и сравнить ее с обычными CSR. Вы должны увидеть СТРОКУ ОКТЕТОВ в самом начале в объекте с меткой ": pkcs7-data", который вам нужно извлечь, чтобы получить CSR.

$ openssl asn1parse -in iis7rcsr -i
0:d=0  hl=4 l=4273 cons: SEQUENCE          
4:d=1  hl=2 l=   9 prim:  OBJECT            :pkcs7-signedData
15:d=1  hl=4 l=4258 cons:  cont [ 0 ]        
19:d=2  hl=4 l=4254 cons:   SEQUENCE          
23:d=3  hl=2 l=   1 prim:    INTEGER           :01
26:d=3  hl=2 l=  11 cons:    SET               
28:d=4  hl=2 l=   9 cons:     SEQUENCE          
30:d=5  hl=2 l=   5 prim:      OBJECT            :sha1
37:d=5  hl=2 l=   0 prim:      NULL              
39:d=3  hl=4 l=2426 cons:    SEQUENCE          
43:d=4  hl=2 l=   9 prim:     OBJECT            :pkcs7-data
54:d=4  hl=4 l=2411 cons:     cont [ 0 ]        
58:d=5  hl=4 l=2407 prim:      OCTET STRING      [HEX DUMP]:3082096330820...

Чтобы получить фактический PKCS # 10 CSR отсюда, нам нужен этот номер смещения, «58» в этом примере. Затем мы можем использовать это смещение для извлечения двоичной версии этого объекта: -

$ openssl asn1parse -in iis7rcsr -strparse 58 -out thecsr -noout

Затем мы можем прочитать этот выходной файл 'thecsr' с помощью openssl req , не забывая указать входной формат DER.

$ openssl req -in thecsr -inform DER -text -noout
Certificate Request:
Data:
    Version: 0 (0x0)
    Subject: (normal CSR Subject: line, censored)
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
...

Я могу обернуть все это в одну командную строку без временных файлов (но, к сожалению, 2 чтения исходного сертификата), пока я могу использовать Linux / proc / self / fd / , чтобы обмануть openssl (он будет делать нативные трюки с файловыми дескрипторами для обработки паролей, но не нормальный вывод).

$ openssl asn1parse -in iis7rcsr -strparse $ (openssl asn1parse -in iis7rcsr | grep -A2 ': pkcs7-data' | tail -1 | cut -d: -f1) -out / dev / stdout -noout | openssl req -inform DER -noout -text

Certificate Request:
Data:
    Version: 0 (0x0)
    Subject: (Subject: line censored again)
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
        RSA Public Key: (1024 bit)
            Modulus (1024 bit):
...

Эта длинная командная строка напрямую эквивалентна простому openssl req -in non-iis7rcsr -noout -text , который я обычно использую: -)

-f1) -out / dev / stdout -noout | openssl req -inform DER -noout -text

Certificate Request:
Data:
    Version: 0 (0x0)
    Subject: (Subject: line censored again)
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
        RSA Public Key: (1024 bit)
            Modulus (1024 bit):
...

Эта длинная командная строка напрямую эквивалентна простому openssl req -in non-iis7rcsr -noout -text , который я обычно использую: -)

-f1) -out / dev / stdout -noout | openssl req -inform DER -noout -text

Certificate Request:
Data:
    Version: 0 (0x0)
    Subject: (Subject: line censored again)
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
        RSA Public Key: (1024 bit)
            Modulus (1024 bit):
...

Эта длинная командная строка напрямую эквивалентна простому openssl req -in non-iis7rcsr -noout -text , который я обычно использую: -)

7
ответ дан 2 December 2019 в 22:11

Спасибо, Джим, за эту прекрасную информацию, которая была очень полезной, у меня была точно такая же проблема при попытке обновить сертификат сервера w2008 / IIS7.

Я бы добавил только одну вещь. Вы можете извлечь CSR в формате P10 напрямую с помощью следующей команды: certutil -split iis7rcsr (iis7rcsr - это файл .csr, который вы получаете через диспетчер IIS). Затем csr будет извлечен в файл с именем blob0_1.p10 Он в двоичном формате (DER), возможно, вам придется закодировать его в base64 с помощью следующей команды: certutil -encode blob0_1.p10 finalcsr.csr

Однако есть последняя проблема. Затем я обнаружил, сбрасывая содержимое .csr с помощью openssl, что процесс обновления автоматически принудительно использовал 1024-битный ключ (хотя исходный закрытый ключ, созданный на сервере для сертификата сервера, имел длину 2048 бит). Похоже, что вы не можете принудительно использовать 2048-битные ключи, используя процесс обновления IIS7.

Единственный хороший вариант - создать новый ключ / сертификат и не использовать процесс обновления.

2
ответ дан 2 December 2019 в 22:11

Теги

Похожие вопросы