Geçersiz kendinden imzalı SSL sertifikası - "Konu Alternatif Adı Eksik"


99

Son zamanlarda Chrome, kendi imzalı SSL sertifikalarımla çalışmayı bıraktı ve bunların güvensiz olduğunu düşünüyor. Sekmedeki sertifikaya baktığımda, DevTools | Securityyazdığını görebiliyorum

Konu Alternatif Adı Eksik Bu sitenin sertifikası, alan adı veya IP adresi içeren Konu Alternatif Adı uzantısı içermiyor.

Sertifika Hatası Sitenin sertifika zincirinde (net :: ERR_CERT_COMMON_NAME_INVALID) sorunlar var.

Bunu nasıl düzeltebilirim?


34
Bu nasıl bir programlama sorusu değil ..... Yığınınızı oluşturmanın bir parçası olan Kendinden imzalı sertifikalarla ilgili. ,,, Teşekkürler Brad
Sweet Chilly Philly

2
CN=www.example.commuhtemelen yanlıştır. Ana bilgisayar adları her zaman SAN'a gider . Onun Varsa CN , o zaman bulunması gerekir SAN çok (Bu durumda iki kez listelemek gerekir). Daha fazla kural ve neden için bkz. Sertifika Yetkilinizle Sertifika İmzalama İsteğini nasıl imzalarsınız ve openssl ile kendinden imzalı bir sertifika nasıl oluşturulur? Ayrıca kendinden imzalı sertifikayı uygun güven deposuna yerleştirmeniz gerekecektir.
jww

@jww - bu, bu sorunun bir kopyası değildir, openssl kullanarak bir sertifika oluşturmanız gerekmediğinden, onu diğer araçlarla oluşturabilirsiniz.
Brad Parks

1
@BradParks - Hmmm ... Soru OpenSSL olarak etiketlendi ve kabul edilen cevap OpenSSL kullanıyor. OpenSSL etiketini yeniden açtım ve kaldırdım.
jww

Yanıtlar:


104

Bunu düzeltmek openssliçin, temel olarak sertifika oluştururken fazladan bir parametre sağlamanız gerekir.

-sha256 -extfile v3.ext

v3.extBöyle bir dosya nerede %%DOMAIN%%kullandığınız ile aynı adla değiştirilir Common Name. Daha fazla bilgi burada ve burada . Genellikle sertifika oluşturmaya çalıştığınız alan için Common Nameve %%DOMAIN%%olarak ayarlayacağınızı unutmayın . Öyleyse www.mysupersite.com, her ikisi için de kullanırdın.

v3.ext

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = %%DOMAIN%%

Not: Bu sorunu ele alan ve Chrome, Safari ve Java istemcilerinden kullanılmak üzere tamamen güvenilir SSL sertifikaları oluşturan komut dosyaları burada bulunabilir.

Başka bir not : Yapmaya çalıştığınız tek şey, kendinden imzalı bir sertifikayı görüntülerken Chrome'un hata atmasını durdurmaksa, Chrome'a burada ayrıntılı olarak açıklandığı gibi özel bir komut satırı seçeneğiyle başlayarak TÜM siteler için tüm SSL hatalarını yoksaymasını söyleyebilirsiniz SuperUser'da


2
Hangi XAMPP sürümünü kullandığınızdan emin değilsiniz, ancak bu dosyada "openssl x509" içeren bir satır ararsanız, yukarıdakini dosyadaki o satırın sonuna ekleyebilmeniz gerekir. Örneğin, bu sürümü makecert.bat , hat 9 üzerinde vardır ve varlık sona ereceğini: bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 -sha256 -extfile v3.ext. Tabii ki yine v3.ext de aynı klasördeki bir dosyaya kaydetmeniz gerekiyor .
Brad Parks

1
Her şeyi denedikten sonra Chrome'u bıraktım ve başka bir tarayıcıyla devam ettim. Birkaç gün sonra, bugün krom ile kontrol ettim ve çalışıyor !!! Chrome'da muhtemelen bir hata vardı ve bunu düzelttiler. Konu Alternatif Adı Eksik için yönteminiz çalışıyor !!!! Tarayıcıya güvenilen kök sertifikalar altındaki sertifikayı eklemeniz yeterlidir.
Tarık

37
Alıyorum unknown option -extfile. Bunu nasıl düzeltirim?
Nick Manning

2
@NickManning - Yönergeyi extfileyanlış openssl komutunda kullanıyorsunuzdur? İçinde kullanılmak yerine openssl req -new ...kullanılır openssl x509 -req .... En azından bu ne burada birisi bahsedilen gelen gerçek bir tavır sergileyen ben tam bu certs oluşturmak için nasıl benzer bir soruya başka cevap var örneğin
Brad Parks

2
"openssl'ye fazladan bir parametre sağlayın" Özellikle hangi komuta? Birden fazla adım var ve bu cevap çok belirsiz: ibm.com/support/knowledgecenter/en/SSWHYP_4.0.0/…
user145400

35

Aşağıdaki çözüm benim için chrome 65 ( ref ) üzerinde çalıştı -

OpenSSL yapılandırma dosyası oluşturun (örnek: req.cnf)

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = US
ST = VA
L = SomeCity
O = MyCompany
OU = MyDivision
CN = www.company.com
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = www.company.com
DNS.2 = company.com
DNS.3 = company.net

Bu yapılandırma dosyasına referans veren sertifikayı oluşturun

openssl req -x509 -nodes -days 730 -newkey rsa:2048 \
 -keyout cert.key -out cert.pem -config req.cnf -sha256

2
Bu harika! Tam olarak ihtiyacım olan şey ve şirket adı, eyalet ve benzeri şeyler için can sıkıcı istemleri de atlıyor.
coredumperror

2
Orada bazı alternatif çözümler denedim ama bu benim için çalışan tek çözüm. Teşekkürler!!
Mirko

1
Konuyu bir komut satırından iletebilirsiniz: openssl req ... -subj "/C=US/ST=VA/L=SomeCity/O=MyCompany/CN=www.company.com"
Jaroslav Záruba

Chrome'a ​​nasıl aktardınız? Burada basicConstraints = CA:truekayıp değil mi?
woodz

19

Bash Komut Dosyası

Chrome'da geçerli olan kendinden imzalı TLS sertifikaları oluşturmayı kolaylaştırmak için bir bash komut dosyası oluşturdum .

Üzerinde test edildi Chrome 65.xve hala çalışıyor. Yeni sertifikaları yükledikten sonra Chrome'u yeniden başlattığınızdan emin olun.

chrome://restart



Diğer kaynaklar

Kontrol etmeye değer bir başka (çok daha sağlam) araç ise CloudFlare'nin cfsslaraç takımıdır:


2
Komut dosyasını buraya eklemeli ve açıklamalısınız.
jww

Güzel senaryo gibi görünüyor. Ancak bir senaryo, OP'nin sorununun ne olduğu konusunda (doğrudan) gerçek bir cevap sağlamaz. Belki sorununun ne olduğunu da açıklayın.
bshea

4

Ben sadece -subjmakinenin ip adresini ekleyen parametreyi kullanıyorum . Yani tek bir komutla çözüldü.

sudo openssl req -x509 -nodes -days 3650 -newkey rsa:2048 -sha256 -subj '/CN=my-domain.com/subjectAltName=DNS.1=192.168.0.222/' -keyout my-domain.key -out my-domain.crt

C, ST, L, O, OU, emailAddress gibi başka öznitelikler ekleyerek istenmeden onaylar oluşturabilirsiniz.


3
için çalışmıyor. Chrome, SAN'ı bu şekilde tanımıyor gibi görünüyor
mononoke

Bu komutu kullanarak OpenSSL 1.1.0b üzerinde "Sertifika İsteğinde sorun yaşıyorum".
Rick

Benim için (Windows) biraz farklı bir sözdizimi çalıştı: openssl.exe req -x509 -sha256 -newkey rsa:2048 -keyout certificate.key -out certificate.crt -days 365 -nodes -subj "/CN=my.domain.com" -addext "subjectAltName=DNS:my.domain.com" IIS daha sonra *.pfxbiçime ihtiyaç duyar :openssl.exe pkcs12 -export -out certificate.pfx -inkey certificate.key -in certificate.crt
Štěpán Havránek

3

MacOS / Chrome üzerinde çalışan kendinden imzalı sertifikalar almakla ilgili çok sorun yaşadım. Sonunda Mkcert'i buldum, "İstediğiniz herhangi bir adla yerel olarak güvenilir geliştirme sertifikaları yapmak için basit bir sıfır yapılandırma aracı." https://github.com/FiloSottile/mkcert


Windows 10'umda yeni Chrome'da da çalışıyor. Varsayılan Windows \ system32 klasöründen .pem dosyalarını başka bir klasöre kopyalamak zorunda kaldım, çünkü Nginx bu klasöre erişemiyor.
vatavale

2
  • Ana dizininizde OpenSSL yapılandırmanızın bir kopyasını oluşturun:

    cp /System/Library/OpenSSL/openssl.cnf ~/openssl-temp.cnf
    

    veya Linux'ta:

    cp /etc/ssl/openssl.cnf ~/openssl-temp.cnf
    
  • Tabi diğer ismini ekle openssl-temp.cnfaltında, [v3_ca]:

    [ v3_ca ]
    subjectAltName = DNS:localhost
    

    localhostBu sertifikayı oluşturmak istediğiniz alan adıyla değiştirin .

  • Sertifika oluştur:

    sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
        -config ~/openssl-temp.cnf
        -keyout /path/to/your.key -out /path/to/your.crt
    

Daha sonra silebilirsiniz openssl-temp.cnf


1

V3.ext dosyasının DNS.1 değerini değiştirerek (net :: ERR_CERT_AUTHORITY_INVALID) 'den kurtulabildim

[alt_names] DNS.1 = alanadi.com

Domainname.com'u kendi alan adınızla değiştirin.


1

İşte Chrome'un güveneceği bir IP sertifikası oluşturmanın çok basit bir yolu.

Ssl.conf dosyası ...

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext
prompt             = no

[ req_distinguished_name ]
commonName                  = 192.168.1.10

[ req_ext ]
subjectAltName = IP:192.168.1.10

Elbette 192.168.1.10, Chrome'un güvenmesini istediğimiz yerel ağ IP'sidir.

Sertifikayı oluşturun:

openssl genrsa -out key1.pem
openssl req -new -key key1.pem -out csr1.pem -config ssl.conf
openssl x509 -req -days 9999 -in csr1.pem -signkey key1.pem -out cert1.pem -extensions req_ext -extfile ssl.conf
rm csr1.pem

Windows'ta sertifikayı tüm istemci makinelerde Güvenilen Kök Sertifika Deposuna alın. Android Telefon veya Tablet'te yüklemek için sertifikayı indirin. Artık Chrome, Windows ve Android'deki sertifikaya güvenecek.

Windows geliştirici kutusunda openssl.exe dosyasını almak için en iyi yer "c: \ Program Files \ Git \ usr \ bin \ openssl.exe" dır.


0

üzerinde MAC krom Sürüm 67.0.3396.99 başlayarak benim kendinden imzalı sertifika çalışmalarına durdu.

burada yazılanlarla yenilenme işe yaramadı.

GÜNCELLEME

yaklaşımımın bugün işe yaradığını teyit etme şansı buldum :). İşe yaramazsa, bu yaklaşımı kullandığınızdan emin olun.

v3.ext
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = <specify-the-same-common-name-that-you-used-while-generating-csr-in-the-last-step>
$

buradan kopyalandı https://ksearch.wordpress.com/2017/08/22/generate-and-import-a-self-signed-ssl-certificate-on-mac-osx-sierra/

GÜNCELLEMEYİ SONLANDIR

Sonunda yalnızca Güvenli yeşil görmek mümkün oldu kaldırılır benim sertifikayı sistemine ve eklenen bunu yerel anahtarlık. (eğer varsa - önce bırakın). Önemli olup olmadığından emin değilim ama benim durumumda krom aracılığıyla sertifikayı indirdim ve oluşturma tarihinin bugün olduğunu doğruladım - bu yüzden az önce oluşturduğum kişi buydu.

umarım bir gün geçiren biri için faydalı olur.

chrome'u asla güncelleme!


0

Eğer sunucu localhost çalıştırmak istiyorsanız, kurulum için gereken CN = localhostve DNS.1 = localhost.

[req]
default_bits = 2048
default_md = sha256
distinguished_name = req_distinguished_name
prompt = no
prompt = no
x509_extensions = v3_req

[req_distinguished_name]
C = BR
CN = localhost
emailAddress=contact@example.com
L = Sao Paulo
O = example.com
OU = example.com
ST = Sao Paulo

[v3_req]
authorityKeyIdentifier = keyid, issuer
basicConstraints = CA:FALSE
extendedKeyUsage = serverAuth
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
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.