Ubuntu'da SSL sertifikası ve özel anahtarlar için en iyi konum


62

Ubuntu'da, sertifikayı imzalamak için kullanılan özel bir anahtar için en iyi yer gibi görünüyor (nginx tarafından kullanılmak üzere) /etc/ssl/private/

Bu cevap sertifikanın girmesi gerektiğini /etc/ssl/certs/ancak güvenli olmayan bir yer gibi göründüğünü ekler . .crtDosyaların güvende tutulması mı gerekiyor yoksa genel olarak kabul ediliyorlar mı?


19
İsterseniz, .crtTimes Square ilan panosuna yazabilirsiniz.
ceejayoz

Yanıtlar:


48

.Crt dosyası, bağlanan her şeye gönderilir; bu halka açık. ( chown root:rootve chmod 644)

Özel anahtar konumuna eklemek için; orada düzgün bir şekilde sabitlediğinizden emin olun. ( chown root:ssl-certve chmod 640)


Neden bu dizinin varsayılan olarak g + s olmadığını merak ediyorum.
Collin Anderson

2
Olmasına gerek yok; dizin 0750 olduğundan, grupta bulunmayan kullanıcıların dosyaları okumak için dizine girmelerine imkan yoktur.
womble

2
Görünüşe göre ssl-cert, ubuntu'da geçersiz bir grup adıdır. Belki de
çiğnenmesi

1
@Atifm ssl-cert sertifika grubu 16.04 veya 18.04'te tanıtıldı. Hangisini hatırlayamıyorum.
DylanYoung

1
@DylanYoung: Ubuntu 12.04'te kesinlikle var ve paketin yarattığına inanıyorum ssl-cert, belki de diğer şeylerin yanı sıra kendinden imzalı yılan derisi sertifikaları
yaratıyor

35

Özel anahtar dosyalarınızı gerektiği gibi koruduğunuz sürece, onları nereye koyduğunuz önemli değildir . Genel sertifika halka olduğu; koruma gerekmez - sunucu ayrıcalıkları veya başka türlü.

Yanıtı genişletmek için varsayılan konumu kullanmıyorum /etc/ssl.
Yedekleri + diğer nedenlerle tüm madeni ayrı bir alanda tutmak benim için daha kolay.

Apache SSL için, benimkini içinde /etc/apache2/ssl/privateveya benzeri bir "kök alanda" tutuyorum /etc/.

Örnek kurulum

Bu yayın Ubuntu (Debian) + Apache'ye yöneliktir, ancak çoğu sistemde çalışmalıdır -
Verilen yapılandırmada izinleri uygulayın ve yer / yolu güncelleyin (apache / nginx / etc).
SSL anahtar dosyaları doğru korunuyorsa (dizin ve dosyalar), iyi olacaksınız. Notları not edin!

Dizinler oluştur:

sudo mkdir /etc/apache2/ssl
sudo mkdir /etc/apache2/ssl/private
sudo chmod 755 /etc/apache2/ssl
sudo chmod 710 /etc/apache2/ssl/private

Not: Ubuntu altındaki grubu
chmod 710destekler ssl-cert.
(Yorumlar)
izni ayarlama 700üzerinde /etc/apache2/ssl/privatede iyi çalışır.

SSL dosyalarını yerleştirin:

Put halka içinde bir ara madde sertifika (ler) ile birlikte, www SSL sertifika (lar) /etc/apache2/ssl
koyun özel SSL anahtar (lar) içinde/etc/apache2/ssl/private

Sahibi ayarla:

sudo chown -R root:root /etc/apache2/ssl/
sudo chown -R root:ssl-cert /etc/apache2/ssl/private/

Not:
Eğer ssl-cert grubunuz yoksa , yukarıdaki satırda 'root: root' kullanın ya da 2. satırı atlayın.

İzinleri ayarla:

Kamu Sertifikaları

sudo chmod 644 /etc/apache2/ssl/*.crt

Özel Anahtar (lar)

sudo chmod 640 /etc/apache2/ssl/private/*.key

Not:
Grup izni, Ubuntu ssl-cert grubu nedeniyle READ (640) olarak ayarlanmıştır. '600' de iyidir.

Apache SSL modülünü etkinleştirin

sudo a2enmod ssl

Apache site dosyalarını düzenleyin ve etkinleştirin

(son paragrafa bakınız) *

sudo nano /etc/apache/sites-available/mysiteexample-ssl.conf
sudo a2ensite mysiteexample-ssl
#             ^^^^^^^^^^^^^^^^^ <-Substitute your ".conf" filename(s)

Apache2 hizmetini yeniden başlatın

sudo service apache2 restart

veya

sudo systemctl restart apache2.service

Bitti. Yeni SSL sitenizi test edin.

* Yine bu, sorunun ötesine geçiyor, ancak Apache'nin SSL site yapılandırma dosyasını ( sudo cp /etc/apache2/sites-available/default-ssl.conf /etc/apache2/sites-available/mysiteexample-ssl.conf), basit bir (Ubuntu / Debian) Apache / SSL 'conf' dosyası altında kullanılan varsayılan direktiflerin / dizinlerin örneği olarak iyi bir başlangıç ​​noktası olarak kopyalayabilirsiniz. . Normalde, kendinden imzalı bir SSL sertifikası + anahtarına (snakeoil), CA paketlerine ve belirli bir SSL sitesi için kullanılan genel yönergelere işaret eder .

Kopyaladıktan sonra, sadece yeni .conf dosyasını düzenleyin ve yukarıdaki yeni bilgilerle / yollarla gerektiği şekilde ekleyin / kaldırın / güncelleyin sudo a2ensite mysiteexample-sslve etkinleştirmek için yürütün .


/ etc / apache2 / ssl / private için neden 710 ayarının önerildiğinden emin değilsiniz. Dizin için (grup için) yürütme bitini, dizinin (grup için) okuma bitini ayarlamadan ayarlamak bana pek bir şey ifade etmiyor. 750 olarak mı ayarladınız?
chriv

@chriv Sadece Ubuntu varsayılan SSL alanı altında nasıl kurulduğunu temel alarak izinleri ayarladım. Bkz. / Etc / ssl / certs & / etc / ssl / private & ssl-certs grup kullanımı. Bkz stackoverflow.com/a/23408897/503621
bshea

1
Birçok olası cevabı olan genel bir soruya çok güzel ve ayrıntılı bir açıklama. Teşekkür ederim. Birkaç şey eklemek için, <VirtualHost *:443>bölümünüzde sites-available/mysite.confşu gibi sertifikalar bulunmalıdır:SSLEngine on SSLCertificateFile /etc/apache2/ssl/mysite.crt SSLCertificateKeyFile /etc/apache2/ssl/private/mysite.key
George Dimitriadis

BTW: 80 ve: 443 konfigürasyonlarınızı tek bir Apache ".conf" dosyasında birleştirmek de mümkün. Temel SSL ayarlarını .conf dosyasına koymak ve ek bir 'ayrıntılı' SSL ayarları dosyası oluşturmak (örneğin, kullanılan şifreleri vb. Ayarlamak için) ve sanal alanların dışındaki tüm .conf dosyalarınıza eklemeniz de mümkündür. SSL’yi biraz sertleştirmek için bu ayarları kullanıyorum ve her sanal siteye dahil ediyorum .conf. Bu şekilde SSL Labs'ta A + alabilirim .
bshea

10

Buradaki tüm cevaplar tamam görünüyor, ama bulduğum bir şeyden bahsetmek istiyorum bir sorun ... Zincirini bulmak için aradığınızı ya da köklerini bir araya getirmeniz gerekiyorsa, bunu koymayın /etc/ssl/certs, çünkü c_rehashÇalıştırıldığı zaman, içindeki kökler veya ara maddeler nedeniyle, cerilerinize karma sembolik bağlantılar oluşturabilir.

Sonra yolun aşağısında, paralarınız zaman aşımına uğradıysa ve bunları kaldırırsanız ve yeniden çalıştırmayı bilmiyorsanız c_rehash, /etc/ssl/certsdizininizde karma işaretler kırılmış olabilir ve yerel makineniz kendi kendine bağlanmaya çalıştığında garip şeyler oluyor SSL ve doğrulanacak kökleri bulamıyor. Örneğin, kıvrılma ile aniden almaya başladım:

curl: (60) SSL certificate problem: unable to get issuer certificate

Bazı eski .crt'leri temizledikten kısa bir süre sonra içinde bulunduğum .pem dosyalarını birleştirdim /etc/ssl/certs.

En azından zincirlerinizi başka bir yerde saklamak bu sorunu önler. Bir yapım sona erdi /etc/ssl/local_certsbenim certs ve zincirleri tutmak için, bu yüzden sen bulabileceğiniz CA certs arasında karmaşa içinde kaybolmuş değildi/etc/ssl/certs


2

Bireysel dosyalar / dizinin izni gibi bir şeye ayarlanmışsa chown root :0 private.keyve chmod 600 private.keysadece kök onu okuyabilirse, gerçekten güvenli olmayan bir yer yoktur . CSR'ler ve sertifika dosyaları dediğiniz gibi daha az hassastır.

Bu izinlerle, bahsettiğiniz yollar ve / usr / local / ssl iyi durumda olmalıdır.


1
Genelde, özel anahtarlara erişen uygulamalar kök olmayan kullanıcılar olarak çalışır. SMS-cert grubuna erişimin korunmasını tavsiye ederim.
Shane Madden

1
Anlaşılan ancak Apache gibi web sunucuları, kök 'ebeveyn' bir süreç ortaya çıkarır ve nginx'in de bunun geçerli olduğunu varsayar.
Jonathan Ross

1

Mekanlar doğru:

  • /etc/ssl/certs/için .crtdosyanın
  • /etc/ssl/privateiçin .keydosyanın

Sahibiroot:root her ikisi için de olmalıdır ( sudo chmod root:root <file>gerekirse değiştirmek için kullanın ).

İzinler :

  • 644için .crtdosyanın
  • 600için .keydosyanın

Bu işe yarayacak nginx.

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.