OpenSSL kullanarak SubjectAltName ile nasıl kendinden imzalı bir sertifika oluşturabilirim? [kapalı]


115

İçinde SubjectAltName bulunan OpenSSL ile kendinden imzalı bir sertifika oluşturmaya çalışıyorum.Sertifika için csr oluştururken, tahminimce OpenSSL x509'un v3 uzantılarını kullanmam gerekiyor. Ben kullanıyorum :

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

Biri bana tam sözdizimi konusunda yardımcı olabilir mi?


2
Ayrıca openssl ile kendinden imzalı bir sertifika nasıl oluşturulur? Konu Alternatif Adı ile bir sertifika oluşturmak için gerekli bilgileri sağlar ve sertifikanın tarayıcılar ve diğer kullanıcı aracıları ile en yüksek başarı şansına sahip olması için geçerli olan diğer kuralları size söyler.
jww

Bu ileti dizisinin altındaki yanıt ( stackoverflow.com/questions/27294589/… ) certificatetools.com'u kullanmak size iyi bir sonuç ve kullanılabilir bir cnf dosyası verecektir
James Nelson

Yanıtlar:


164

Biri bana tam sözdizimi konusunda yardımcı olabilir mi?

Bu üç adımlı bir süreçtir ve openssl.cnfdosyayı değiştirmeyi içerir . Bunu yalnızca komut satırı seçenekleriyle yapabilirsiniz, ancak ben öyle yapmıyorum.

Dosyanı bul openssl.cnf. Muhtemelen şurada bulunur /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

Benim üzerinde Debian sisteminde, /usr/lib/ssl/openssl.cnfyerleşik tarafından kullanılan opensslprograma. Son Debian sistemlerinde şu adreste bulunur:/etc/ssl/openssl.cnf

Dosyaya openssl.cnfsahte ekleyerek hangisinin kullanıldığını belirleyebilir XXXve opensslboğulma olup olmadığını görebilirsiniz .


İlk önce reqparametreleri değiştirin . Kullanmak istediğiniz adların bulunduğu bir alternate_namesbölüm ekleyin openssl.cnf. Mevcut alternate_namesbölüm yok , bu yüzden nereye eklediğiniz önemli değil.

[ alternate_names ]

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

Ardından, mevcut [ v3_ca ] bölüme aşağıdakileri ekleyin . Tam dizeyi arayın [ v3_ca ]:

subjectAltName      = @alternate_names

Sen değişebilir keyUsageaşağıdaki altındakiler için [ v3_ca ]:

keyUsage = digitalSignature, keyEncipherment

digitalSignatureve keyEnciphermentbir sunucu sertifikası için standart ücrettir. Endişelenme nonRepudiation. Avukat olmak isteyen bilgisayar bilimi adamları / kadınları tarafından düşünülmüş faydasız bir şey. Hukuk dünyasında hiçbir anlamı yoktur.

Sonunda, IETF ( RFC 5280 ), tarayıcılar ve CA'lar hızlı ve gevşek çalışırlar, bu nedenle muhtemelen hangi anahtar kullanımını sağladığınız önemli değildir.


İkinci olarak, imzalama parametrelerini değiştirin. Bu satırı CA_defaultbölümün altında bulun :

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

Ve şu şekilde değiştirin:

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

Bu, SAN'ların sertifikaya kopyalanmasını sağlar. DNS adlarını kopyalamanın diğer yolları bozulmuştur.


Üçüncüsü, kendinden imzalı sertifikanızı oluşturun:

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

Son olarak, sertifikayı inceleyin:

$ 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
Sadece openssl dosyasını kopyaladım ve yerel olarak ayarladım. Sonra her şeyi şununla oluşturdu: 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
Burada açıklanan ortam değişkenlerini kullanarak bunu daha esnek hale getirmenin de güzel bir yolu var : subjectAltName=$ENV::ALTNAME(ve env. Var'ı ayarlayın ALTNAME=DNS:example.com,DNS:other.example.net).
Bruno

6
Bir ip adresiyle çalışıyorsanız for IPyerine kullandığınızı unutmayın . Yapılandırma dosyasını yerel olarak da kopyalayabilir ve ardından openssl komut satırında ile belirtebilirsiniz . Ve yorum yapmak zorunda kalmayabilirsiniz . DNSalternate_names-config my_config.cnfreq_extensions = v3_req
Adversus

5
Bunu OSX üzerinde hiçbir zaman çalışmadım, ancak bu bağlantıdaki req.conf şablonunu kullanmak bir cazibe gibi çalıştı: support.citrix.com/article/CTX135602 (Ayrıntıları bir cevaba çıkarırdım, ancak bu soru yardımcı olmadan kapatıldı )
rymo

3
bazı nedenlerden dolayı v3_ca bölümündeki subjectAltName = @alternate_names'i beğenmiyor. Bir yazım hatası olabilir mi? İşte aldığım hata: hata: 22097069: X509 V3 rutinleri: DO_EXT_NCONF: geçersiz uzantı dizesi: v3_conf.c: 139: name = subjectAltName, bölüm = @ alternate_names 140487468840608: hata: 22098080: X509 V3 rutinleri: X509V3_EXT_nconf: uzantı hatası: X509V3_EXT_nconf v3_conf.c: 93: name = subjectAltName, value = @ alternate_names
James Nelson
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.