Làm cách nào để tạo chứng chỉ tự ký với SubjectAltName bằng OpenSSL? [đóng cửa]


115

Tôi đang cố gắng tạo chứng chỉ tự ký bằng OpenSSL với SubjectAltName trong đó. Trong khi tôi đang tạo csr cho chứng chỉ, tôi đoán là tôi phải sử dụng phần mở rộng v3 của OpenSSL x509. Tôi đang dùng :

openssl req -new -x509 -v3 -key private.key -out certificate.pem -days 730

Ai đó có thể giúp tôi với cú pháp chính xác không?


2
Ngoài ra, hãy xem Cách tạo chứng chỉ tự ký với openssl? Nó cung cấp thông tin để tạo chứng chỉ với Tên thay thế Chủ đề và cho bạn biết các quy tắc khác áp dụng để chứng chỉ có cơ hội thành công cao nhất với các trình duyệt và tác nhân người dùng khác.
jww

câu trả lời ở cuối chuỗi này ( stackoverflow.com/questions/27294589/… ) bằng cách sử dụng certificateatetools.com sẽ cung cấp cho bạn kết quả tốt và tệp cnf có thể sử dụng
James Nelson

Câu trả lời:


164

Ai đó có thể giúp tôi với cú pháp chính xác không?

Đó là một quy trình gồm ba bước và nó bao gồm việc sửa đổi openssl.cnftệp. Bạn có thể làm điều đó chỉ với các tùy chọn dòng lệnh, nhưng tôi không làm theo cách đó.

Tìm openssl.cnftệp của bạn . Nó có thể nằm ở /usr/lib/ssl/openssl.cnf:

$ find /usr/lib -name openssl.cnf
/usr/lib/openssl.cnf
/usr/lib/openssh/openssl.cnf
/usr/lib/ssl/openssl.cnf

Trên tôi Debian hệ thống, /usr/lib/ssl/openssl.cnfđược sử dụng bởi được xây dựng trong opensslchương trình. Trên các hệ thống Debian gần đây, nó nằm ở/etc/ssl/openssl.cnf

Bạn có thể xác định cái nào openssl.cnfđang được sử dụng bằng cách thêm nội dung giả XXXvào tệp và xem có opensslcuộn cảm hay không.


Đầu tiên, hãy sửa đổi các reqthông số. Thêm một alternate_namesphần openssl.cnfvới tên bạn muốn sử dụng. Không có alternate_namesphần nào hiện có , vì vậy không quan trọng bạn thêm nó vào đâu.

[ alternate_names ]

DNS.1        = example.com
DNS.2        = www.example.com
DNS.3        = mail.example.com
DNS.4        = ftp.example.com

Tiếp theo, thêm phần sau vào phần hiện có [ v3_ca ] . Tìm kiếm chuỗi chính xác [ v3_ca ]:

subjectAltName      = @alternate_names

Bạn có thể thay đổi keyUsagenhững điều sau theo [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignaturekeyEnciphermentlà giá vé tiêu chuẩn cho chứng chỉ máy chủ. Đừng lo lắng về nonRepudiation. Đó là một chút vô ích được nghĩ ra bởi những chàng trai / cô gái khoa học máy tính muốn trở thành luật sư. Nó không có nghĩa là gì trong thế giới pháp lý.

Cuối cùng, IETF ( RFC 5280 ), các trình duyệt và CA chạy nhanh và lỏng lẻo, vì vậy có thể bạn cung cấp cách sử dụng khóa nào không quan trọng.


Thứ hai, sửa đổi các tham số ký kết. Tìm dòng này dưới CA_defaultphần:

# Extension copying option: use with caution.
# copy_extensions = copy

Và thay đổi nó thành:

# Extension copying option: use with caution.
copy_extensions = copy

Điều này đảm bảo SAN được sao chép vào chứng chỉ. Các cách khác để sao chép tên DNS bị hỏng.


Thứ ba, tạo chứng chỉ tự ký của bạn:

$ openssl genrsa -out private.key 3072
$ openssl req -new -x509 -key private.key -sha256 -out certificate.pem -days 730
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
...

Cuối cùng, kiểm tra chứng chỉ:

$ openssl x509 -in certificate.pem -text -noout
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 9647297427330319047 (0x85e215e5869042c7)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Validity
            Not Before: Feb  1 05:23:05 2014 GMT
            Not After : Feb  1 05:23:05 2016 GMT
        Subject: C=US, ST=MD, L=Baltimore, O=Test CA, Limited, CN=Test CA/emailAddress=test@example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (3072 bit)
                Modulus:
                    00:e2:e9:0e:9a:b8:52:d4:91:cf:ed:33:53:8e:35:
                    ...
                    d6:7d:ed:67:44:c3:65:38:5d:6c:94:e5:98:ab:8c:
                    72:1c:45:92:2c:88:a9:be:0b:f9
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Key Identifier:
                34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4
            X509v3 Authority Key Identifier:
                keyid:34:66:39:7C:EC:8B:70:80:9E:6F:95:89:DB:B5:B9:B8:D8:F8:AF:A4

            X509v3 Basic Constraints: critical
                CA:FALSE
            X509v3 Key Usage:
                Digital Signature, Non Repudiation, Key Encipherment, Certificate Sign
            X509v3 Subject Alternative Name:
                DNS:example.com, DNS:www.example.com, DNS:mail.example.com, DNS:ftp.example.com
    Signature Algorithm: sha256WithRSAEncryption
         3b:28:fc:e3:b5:43:5a:d2:a0:b8:01:9b:fa:26:47:8e:5c:b7:
         ...
         71:21:b9:1f:fa:30:19:8b:be:d2:19:5a:84:6c:81:82:95:ef:
         8b:0a:bd:65:03:d1

7
Tôi vừa sao chép tệp openssl đó và điều chỉnh cục bộ. Sau đó, tạo ra tất cả mọi thứ với: openssl genrsa -out cert.key 3072 -nodes openssl req -new -x509 -key cert.key -sha256 -config openssl.cnf -out cert.crt -days 730 -subj "/C=US/ST=private/L=province/O=city/CN=hostname.example.com"
stwienert

7
Ngoài ra còn có một mẹo hay để làm cho điều này linh hoạt hơn bằng cách sử dụng các biến môi trường được mô tả ở đây : subjectAltName=$ENV::ALTNAME(và đặt env. Var ALTNAME=DNS:example.com,DNS:other.example.net).
Bruno

6
Lưu ý rằng bạn sử dụng IPthay vì DNSfor alternate_namesnếu bạn đang làm việc với địa chỉ ip. Bạn cũng có thể sao chép tệp cấu hình cục bộ và sau đó chỉ định tệp đó trên dòng lệnh openssl với -config my_config.cnf. Và bạn có thể phải bỏ ghi chú req_extensions = v3_req.
Adversus

5
Tôi chưa bao giờ làm cho điều này hoạt động trên OSX, nhưng sử dụng mẫu req.conf tại liên kết này hoạt động như một sự quyến rũ: support.citrix.com/article/CTX135602 (Tôi muốn trích xuất các chi tiết thành một câu trả lời nhưng câu hỏi này đã bị đóng lại một cách vô ích )
rymo

3
vì một số lý do nó không thích chủ đềAltName = @alternate_names trong phần v3_ca. Nó có thể là một lỗi đánh máy? Đây là lỗi tôi gặp phải: error: 22097069: X509 V3 quy trình: DO_EXT_NCONF: chuỗi mở rộng không hợp lệ: v3_conf.c: 139: name = subjectAltName, section = @ alternate_names 140487468840608: error: 22098080: X509 V3 thường xuyên: X509V3_EXT_ncon v3_conf.c: 93: name = subjectAltName, value = @ alternate_names
James Nelson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.