Localhost için kendinden imzalı sertifika nasıl yapılır?


23

Bir parola ve aşağıdaki alanları root olarak yaptım

openssl req -x509 -days 365 -newkey rsa:2048 -keyout /etc/ssl/apache.key \
    -out /etc/ssl/apache.crt

Alanlar

Country: FI
State: Pirkanmaa
Locality: Tampere
Organization: masi
Organizational Unit Name: SSL Certificate Test
CommonName: 192.168.1.107/owncloud
EmailAddress: masi@gmail.com

Çıktı: HTTPS'de SSL anlaşması hatası. Beklenen çıktı: HTTPS bağlantısı. HTTP çalışıyor.

CommonName, gitmek istediğiniz URL'yi, owncloud'un başlığını burada içermelidir . Ben ortak ad başarısızlıkla denedim

  • 192.168.1.107/owncloud
  • 192.168.1.107/

Sunucu için işletim sistemi sınama: Debian 8.5.
Sunucu: Ahududu Pi 3b. Owncloud-server: 8.2.5. Owncloud-client: 2.1.1. Sistem-müşteri: Debian 8.5.


Localhost için SAN kullanarak yeni SSL sertifikası oluşturmak istiyorsanız, bu yayındaki adımlar benim için çalıştı Centos 7 / Vagrant / Chrome Browser.
Damodar Bashyal,

@DamodarBashyal Lütfen, yalnızca bağlantıyı değil, aynı zamanda bir cevap olarak da bir açıklama yapmayın.
Léo Léopold Hertz 준영

Yanıtlar:


11

openssl req -x509 -days 365 -newkey rsa: 2048 -keyout /etc/ssl/apache.key -out /etc/ssl/apache.crt

İyi biçimlendirilmiş bir X.509 sertifikası oluşturmak için bu komutu kullanamazsınız. Ana bilgisayar adı Ortak Ad'a (CN) yerleştirildiği için hatalı biçimlendirilir . CN bir veya IP Adresi yerleştirme (gibi çoğu araçlar IETF ikisi tarafından itiraz edildi wgetve curl) ve CA / B Forumlar (Yetkili Otorite ve Tarayıcılar).

Hem IETF hem de CA / B Forumlarına göre, Sunucu adları ve IP Adresleri her zaman Konu Alternatif Adına (SAN) gider . Kurallar için, bkz. RFC 5280, Internet X.509 Genel Anahtar Altyapısı Sertifika ve Sertifika İptal Listesi (CRL) Profili ve CA / Tarayıcı Forumu Temel Gereksinimleri .

Çoğunlukla bir OpenSSL yapılandırma dosyası kullanmanız ve ihtiyaçlarınıza göre uyarlamanız gerekir. Aşağıda kullandığım bir örnek. Deniyor example-com.confve üzeri OpenSSL komutuna geçirilen -config example-com.conf.


Ayrıca iyi not : tüm makineler olduklarını iddia localhost, localhost.localdomainvb için sertifika verilmesi konusunda dikkatli olun localhost. Yapma , demiyorum; Sadece anladım ki, bazı riskler var.

Alternatifleri localhost: (1) DNS çalıştırmak ve makinenin DNS adına sertifika vermek. Veya, (2) statik IP kullanır ve statik IP adresini içerir.


Tarayıcılar, size güvenilir bir kök için geri zincirleme yapmayan kendinden imzalı bir sertifika hakkında hala uyarılar verecektir . Gibi curlve wgetşikayet etmeyeceğiniz araçlar , ancak yine de cURL'ler gibi bir seçenekle kendinize imzalı olduğunuza güvenmeniz gerekiyor --cafile. Tarayıcı güven sorununun üstesinden gelmek için kendi CA'nız olması gerekir.

"Kendi CA'nız olmak" , Özel bir PKI’yı işletmek olarak bilinir. Fazla bir şey yok. Bir Genel CA'nın yapabileceği her şeyi yapabilirsiniz. Farklı olan tek şey , Kök CA Sertifikanızı çeşitli mağazalara yüklemeniz gerekecek . CURL's kullanmaktan başka bir şey değil cacerts.pm. cacerts.pmsadece bir Root CA koleksiyonudur ve şimdi kulübe katıldınız.

Kendi CA'nız haline gelirseniz, diske girip çevrimdışı tutmak için Root CA özel anahtarınızı yazdığınızdan emin olun. Sonra bir imzalama isteği imzalamanız gerektiğinde CD / DVD sürücünüze yerleştirin. Şimdi de bir Genel CA gibi sertifika veriyorsunuz.

Bir veya iki imzalama isteğini imzaladığınızda hiçbiri bu kadar zor değil. Evde yıllardır Özel PKI işletiyorum. Tüm aygıtlarım ve aygıtlarım CA'ma güveniyor.

Kendi CA'nız olma konusunda daha fazla bilgi 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? .


Aşağıdaki yapılandırma dosyasındaki yorumlardan ...

Kendinden İmzalı (-x509 ekine dikkat edin)

openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem

İmzalama İsteği (-x509 eksikliğine dikkat edin)

openssl req -config example-com.conf -new -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.req.pem

Kendinden İmzalı Baskı

openssl x509 -in example-com.cert.pem -text -noout

İmzalama İsteği Yazdırın

openssl req -in example-com.req.pem -text -noout

Yapılandırma Dosyası

# Self Signed (note the addition of -x509):
#     openssl req -config example-com.conf -new -x509 -sha256 -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.cert.pem
# Signing Request (note the lack of -x509):
#     openssl req -config example-com.conf -new -newkey rsa:2048 -nodes -keyout example-com.key.pem -days 365 -out example-com.req.pem
# Print it:
#     openssl x509 -in example-com.cert.pem -text -noout
#     openssl req -in example-com.req.pem -text -noout

[ req ]
default_bits        = 2048
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

# The Subject DN can be formed using X501 or RFC 4514 (see RFC 4519 for a description).
#   It's sort of a mashup. For example, RFC 4514 does not provide emailAddress.
[ subject ]
countryName         = Country Name (2 letter code)
countryName_default     = US

stateOrProvinceName     = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName            = Locality Name (eg, city)
localityName_default        = New York

organizationName         = Organization Name (eg, company)
organizationName_default    = Example, LLC

# Use a friendly name here because it's presented to the user. The server's DNS
#   names are placed in Subject Alternate Names. Plus, DNS names here is deprecated
#   by both IETF and CA/Browser Forums. If you place a DNS name here, then you 
#   must include the DNS name in the SAN too (otherwise, Chrome and others that
#   strictly follow the CA/Browser Baseline Requirements will fail).
commonName          = Common Name (e.g. server FQDN or YOUR name)
commonName_default      = Example Company

emailAddress            = Email Address
emailAddress_default        = test@example.com

# Section x509_ext is used when generating a self-signed certificate. I.e., openssl req -x509 ...
[ x509_ext ]

subjectKeyIdentifier        = hash
authorityKeyIdentifier  = keyid,issuer

#  If RSA Key Transport bothers you, then remove keyEncipherment. TLS 1.3 is removing RSA
#  Key Transport in favor of exchanges with Forward Secrecy, like DHE and ECDHE.
basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
# extendedKeyUsage  = serverAuth, clientAuth

# Section req_ext is used when generating a certificate signing request. I.e., openssl req ...
[ req_ext ]

subjectKeyIdentifier        = hash

basicConstraints        = CA:FALSE
keyUsage            = digitalSignature, keyEncipherment
subjectAltName          = @alternate_names
nsComment           = "OpenSSL Generated Certificate"

# RFC 5280, Section 4.2.1.12 makes EKU optional
# CA/Browser Baseline Requirements, Appendix (B)(3)(G) makes me confused
# extendedKeyUsage  = serverAuth, clientAuth

[ alternate_names ]

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

# Add these if you need them. But usually you don't want them or
#   need them in production. You may need them for development.
# DNS.5       = localhost
# DNS.6       = localhost.localdomain
# DNS.7       = 127.0.0.1

# IPv6 localhost
# DNS.8     = ::1
# DNS.9     = fe80::1

Chrome için aşağıdakileri yapmanız gerekebilir. Aksi halde Chrome, Ortak Bir Adın geçersiz olduğundan şikayet edebilir ( ERR_CERT_COMMON_NAME_INVALID) . SAN'daki bir IP adresi ile bu örnekteki bir CN arasındaki ilişkinin ne olduğundan emin değilim.

# IPv4 localhost
# IP.1       = 127.0.0.1

# IPv6 localhost
# IP.2     = ::1

Lütfen config dosyasına varsayılan yolu ekleyebilir misiniz? - - Lütfen iş akışının tamamını gösterebilir misiniz? Dosyayı openssl komutuna vb. İletmek hakkında. - - Önceki cevaba girmeyi başaramadım, bu yüzden gerekli tüm bilgilerim takdir edildi.
Léo Léopold Hertz 준영

@Masi - "Lütfen config dosyasına varsayılan yolu ekleyebilir misiniz?" - Ne demek istediğinden emin değilim. Nerede istersen kurtarabilirsin. Masaüstünden birçok makinede, ev dizinimi ise başkalarında çalıştırıyorum. Kullandığını fark ettim sudo. Belki de .rnddosyanızın aittir root. Eğer öyleyse, bir deneyin sudo chown -R masi:masi /home/masi. O zaman ondan okuyabilir ve yazabilirsin.

Şimdi sadece Debian kullanıyorum, Ubuntu değil, sadece root kullanıyorum. Lütfen iş akışınızı Masaüstü'ndeki keepinv dosyası ve ileriye dönük bir örnek olarak ekleyin. Sistem hakkında net bir resmim yok.
Léo Léopold Hertz 준영

1
Dosyanın başında listelenen komutlardan birini çalıştırın. Yorumlar kopyala / yapıştır için var. Zevkinize uygun olanı seçin. Hala kendinden imzalı bir belge oluşturmaya çalışıyorsanız, komutu içinde çalıştırabilirsiniz x509(tıpkı yorumun yazdığı gibi).

Yazar, "CA / B değişiklikleri nedeniyle" bu gönderinin silinmesini istedi, ancak yıllar içinde sağladığı oy sayısı ve olası yardım nedeniyle, geri yükledim. Verildiği zaman verilen yazıdaki tavsiyeye uyun.
Jeff Schaller

1

CommonNameOlarak gönderilir şeyle tekabül olmalıdır Host: HTTP isteğinde başlığında. Senin durumunda, bu 192.168.1.107 (takip eden bir eğik çizgi olmadan) olurdu .

Bir web sunucusu için ana bilgisayar adını yapılandırma

Şahsen, web sunucusu için dostane bir ana bilgisayar adı yapılandırdım. Postanızdaki Apache yapılandırmasında veya sanal ana bilgisayar yapılandırmasında (muhtemelen /etc/apache2/sites-enabled/000-default.confDebian tabanlı dağıtımlarda bulunacaksa ) ServerNameveya ServerAliasyönergelerini kullanın;

ServerName owncloud.masi

Apache'yi yeniden başlatın ve ardından DNS'yi yapılandırın ya da (daha basit bir şekilde) /etc/hostsdoğru IP adresine yönlendirmek için her müşteriye bir giriş ekleyin.

192.168.1.107   owncloud.masi

Kendi bulut erişimim var 192.168.1.107. Diğer konu, alt etki alanı eklemeniz gerektiğini söylüyor. Sanırım ima ediyor 192.168.1.107/owncloud. Ancak yanılıyor olabilirim.
Léo Léopold Hertz 준영

Kullanmak varsayın ServerName owncloud.masiiçinde .../sites-enabled/000-default.conf. Mı CommonName SSL anahtarının sonra owncloud.masi ?
Léo Léopold Hertz 준영

IP adresi çalışmayı durdurur mu? Benzer şekilde kullanırsanız ServerAlias?
Léo Léopold Hertz 준영

1
IP adresi üzerinden erişim, HTTP için çalışmaya devam etmelidir. BTW, yorum sınırlarına ulaştık (bu nedenle sorularınıza önceki cevaplarımı sildim) ve yakında çevrimiçi duruma geçmem gerekecek.
Anthony G - Monica

1
"CommonName, HTTP isteğinde Ana Bilgisayar: başlık olarak gönderilen her şeye karşılık gelmelidir" - Yanlış. Bir ana bilgisayar adı girmek, Ortak Adın hem IETF hem de CA / B Forumları tarafından onaylanmadığıdır. Sunucu adları ve IP Adresleri her zaman IETF ve CA / B Forumlarına göre Konu Alternatif Adına gider. Ayrıca Sertifika Yetkilinizle Sertifika İmzalama İsteğini nasıl imzalarsınız ve openssl ile kendinden imzalı bir sertifika nasıl oluşturulur?
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.