Bagaimana cara membuat sertifikat yang ditandatangani sendiri dengan SubjectAltName menggunakan OpenSSL? [Tutup]


115

Saya mencoba membuat sertifikat yang ditandatangani sendiri dengan OpenSSL dengan SubjectAltName di dalamnya. Saat saya membuat csr untuk sertifikat, tebakan saya adalah saya harus menggunakan ekstensi v3 dari OpenSSL x509. Saya menggunakan :

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

Bisakah seseorang membantu saya dengan sintaks yang tepat?


2
Lihat juga Bagaimana cara membuat sertifikat yang ditandatangani sendiri dengan openssl? Ini memberikan informasi untuk membuat sertifikat dengan Nama Alternatif Subjek, dan memberi tahu Anda aturan lain yang berlaku sehingga sertifikat akan memiliki peluang sukses terbesar dengan browser dan agen pengguna lainnya.
jww

jawaban di bagian bawah utas ini ( stackoverflow.com/questions/27294589/… ) menggunakan certificatetools.com akan memberi Anda hasil yang baik dan file cnf yang dapat digunakan
James Nelson

Jawaban:


164

Bisakah seseorang membantu saya dengan sintaks yang tepat?

Ini adalah proses tiga langkah, dan ini melibatkan modifikasi openssl.cnffile. Anda mungkin dapat melakukannya hanya dengan opsi baris perintah, tetapi saya tidak melakukannya dengan cara itu.

Temukan openssl.cnffile Anda . Kemungkinan besar terletak di /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

Di sistem Debian saya , /usr/lib/ssl/openssl.cnfdigunakan oleh opensslprogram bawaan. Pada sistem Debian terbaru, ini terletak di/etc/ssl/openssl.cnf

Anda dapat menentukan mana openssl.cnfyang digunakan dengan menambahkan file palsu XXXdan melihat apakah openssltersedak.


Pertama, ubah reqparameter. Tambahkan alternate_namesbagian openssl.cnfdengan nama yang ingin Anda gunakan. Tidak ada alternate_namesbagian yang ada , jadi tidak masalah di mana Anda menambahkannya.

[ alternate_names ]

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

Selanjutnya, tambahkan yang berikut ini ke bagian yang ada [ v3_ca ] . Cari string yang tepat [ v3_ca ]:

subjectAltName      = @alternate_names

Anda dapat mengubah keyUsageke yang berikut di bawah ini [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignaturedan keyEnciphermentmerupakan tarif standar untuk sertifikat server. Jangan khawatir nonRepudiation. Ini sedikit tidak berguna dipikirkan oleh orang-orang ilmu komputer yang ingin menjadi pengacara. Itu tidak ada artinya di dunia hukum.

Pada akhirnya, IETF ( RFC 5280 ), browser, dan CA berjalan cepat dan longgar, jadi mungkin tidak masalah penggunaan kunci apa yang Anda berikan.


Kedua, ubah parameter penandatanganan. Temukan baris ini di bawah CA_defaultbagian:

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

Dan ubah menjadi:

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

Ini memastikan SAN disalin ke dalam sertifikat. Cara lain untuk menyalin nama DNS rusak.


Ketiga, buat sertifikat yang Anda tandatangani sendiri:

$ 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.
...

Terakhir, periksa sertifikatnya:

$ 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
Saya baru saja menyalin file openssl itu dan menyesuaikannya secara lokal. Kemudian buat semuanya dengan: 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
Ada juga trik bagus untuk membuatnya lebih fleksibel dengan menggunakan variabel lingkungan yang dijelaskan di sini : subjectAltName=$ENV::ALTNAME(dan setel env. Var ALTNAME=DNS:example.com,DNS:other.example.net).
Bruno

6
Perhatikan bahwa Anda menggunakan IPalih-alih DNSuntuk alternate_namesjika Anda bekerja dengan alamat ip. Anda juga dapat menyalin file konfigurasi secara lokal dan kemudian menentukannya pada baris perintah openssl dengan -config my_config.cnf. Dan Anda mungkin harus menghapus komentar req_extensions = v3_req.
Adversus

5
Saya tidak pernah mendapatkan ini untuk bekerja di OSX, tetapi menggunakan template req.conf di tautan ini bekerja seperti pesona: support.citrix.com/article/CTX135602 (Saya akan mengekstrak detailnya menjadi jawaban tetapi pertanyaan ini telah ditutup dengan tidak membantu )
rymo

3
untuk beberapa alasan ia tidak menyukai subjectAltName = @alternate_names di bawah bagian v3_ca. Mungkinkah itu salah ketik? Inilah kesalahan yang saya dapatkan: kesalahan: 22097069: X509 V3 rutinitas: DO_EXT_NCONF: string ekstensi tidak valid: v3_conf.c: 139: name = subjectAltName, section = @ alternate_names 140487468840608: error: 22098080: rutinitas X509 V3: X509V3_EXT_nconf: kesalahan dalam ekstensi: v3_conf.c: 93: name = subjectAltName, value = @ alternate_names
James Nelson
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.