14.4.4. CA imzalı (herkesçe güvenilen) sertifikalar¶
Kendinden imzalı sertifikalar, her iki ucu da kontrol ettiğinizde çalışır. Bunun yerine rastgele istemcilerin (tarayıcılar, telefonlar, üçüncü taraf yazılımlar) özel bir sertifikaya güvenmeleri söylenmeden kameraya bağlanması gerekiyorsa, sertifikanın bu istemcilerin zaten güvendiği genel bir Sertifika Yetkilisi (CA) tarafından imzalanması gerekir. Kameradaki TLS kodu kendinden imzalı durumla aynıdır – DER biçiminde bir sertifika ve bir anahtarla load_cert_chain – yalnızca o sertifikayı edinme şekliniz değişir.
En önemli nokta: özel anahtarı kendiniz oluşturursunuz ve o asla makinenizden ayrılmaz. CA onu asla görmez. CA’ya gönderdiğiniz şey bir sertifika imzalama isteğidir (CSR) – genel anahtarınızı ve etki alanı adınızı içeren küçük bir dosya – ve geri aldığınız şey bir sertifikadır (genel anahtarınız ve adınız, CA tarafından imzalanmış). Anahtar ve sertifika, iki ayrı adımda üretilen iki ayrı dosyadır; CA yalnızca genel yarıyı işler.
Genel akış, tamamı normal bir makinede yapılır (asla kamerada değil):
Bir etki alanı adı edinin. Genel CA’lar kontrol ettiğiniz bir DNS adını (örneğin
cam.example.com) sertifikalandırır; çıplak bir IP adresi veyamycamgibi yalnızca yerel bir ad için sertifika vermezler.Bir anahtar ve bir CSR oluşturun. Tek bir OpenSSL komutu özel anahtarı ve eşleşen CSR’yi üretir. Kendinden imzalı bir sertifika için kullanacağınız anahtar türünün aynısını kullanın (bkz. Kavramlar: güven, anahtarlar ve dosya biçimi); ECDSA P-256 önerilir.
ECDSA P-256 – önerilir:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
ECDSA P-384 – daha güçlü, daha büyük/daha yavaş:
openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:secp384r1 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
RSA-2048 – maksimum uyumluluk:
openssl req -new -newkey rsa:2048 \ -nodes -keyout domain.key -out domain.csr \ -subj "/CN=cam.example.com" \ -addext "subjectAltName=DNS:cam.example.com"
domain.keydosyasını gizli tutun – bu, sonunda kameraya koyacağınız anahtar dosyasıdır.domain.csrise CA’ya verdiğiniz dosyadır; hiçbir gizli bilgi içermez.CSR’yi gönderin ve etki alanını kontrol ettiğinizi kanıtlayın. İki yaygın yolun farklılaştığı yer burasıdır:
Let’s Encrypt gibi
certbotveyaacme.shgibi bir araçla yönetilen otomatik bir ACME CA’sı, 2. ve 3. adımları sizin için yapar: anahtarı oluşturur, CSR’yi inşa eder, sınamayı otomatik olarak yanıtlar (HTTP-01: etki alanında 80 numaralı bağlantı noktası üzerinden bir belirteç sunar veya DNS-01: DNS’inde bir TXT kaydı yayınlar) ve tamamlanmış dosyaları yazar.Ticari bir CA (doğrudan veya bir etki alanı/barındırma satıcısı aracılığıyla satın alınır):
domain.csrmetnini bir web formuna yapıştırır, ardından bir doğrulama e-postasını yanıtlayarak, bir DNS kaydı yayınlayarak veya o etki alanına ait bir web sunucusuna bir dosya yerleştirerek kontrolü kanıtlarsınız. Doğrulandıktan sonra verilen dosyaları indirirsiniz.
Verilen dosyaları toplayın. Aldığınız şeyleri anlamlandırmak için, sertifikaların bir güven zinciri oluşturduğunu bilmek yardımcı olur: etki alanınızın sertifikası bir ara CA tarafından imzalanır, o da sırayla bir kök CA tarafından imzalanır. Her halka, altındakine kefil olur. Sonunda şunlara sahip olursunuz:
Özel anahtarınız (2. adımdan). CA ona asla sahip olmadı; makinenizde kalır ve sonunda kameraya koyacağınız anahtardır.
Yaprak sertifika – ayrıca son varlık veya sunucu sertifikası olarak da adlandırılır. Bu, belirli etki alanınız (
cam.example.com) için olan sertifikadır: genel anahtarınızı ve adınızı içerir ve CA’nın ara sertifikası tarafından imzalanmıştır. Bu, kameranın kendini tanıtmak için sunduğu sertifikadır.Bir veya daha fazla ara CA sertifikası (“zincir” veya “CA paketi”). Bir CA, yaprağınızı kökü ile doğrudan imzalamaz – kökün anahtarı çevrimdışı tutulur ve yoğun şekilde korunur – bu yüzden kendisi kök tarafından imzalanan bir ara sertifika ile imzalar. Ara sertifika, yaprağınızı köke bağlayan halkadır.
Kök sertifika, güven çapasıdır: zincirin tepesinde yer alan, CA’ya ait kendinden imzalı bir sertifika. Size verilmez ve onu asla dağıtmazsınız, çünkü her istemci zaten ona sahiptir – işletim sistemleri, tarayıcılar, telefonlar ve dil çalışma zamanları yerleşik bir kök sertifika “güven deposu” ile gelir. Bir istemci, zincirde yürüyerek yaprağınıza güvenir: kök sertifikaya zaten güvenir, kök ara sertifikaya kefil olur ve ara sertifika yaprağınıza kefil olur. (Bu, tam olarak tek
server.der/cafiledosyanızın kendinden imzalı durumda yaptığı iştir – orada kendi kökünüz sizsinizdir.)Bir fullchain dosyası, yalnızca yaprak ve ara sertifika(lar)ın tek bir dosyada birleştirilmiş halidir; yaprak önce gelir ve kasıtlı olarak köksüzdür (kökü göndermek anlamsızdır – bir istemci yalnızca zaten sahip olduğu köklere güvenir). Normal bir sunucu, herhangi bir istemcinin zincirde yürüyebilmesi için bu fullchain’in tamamını sunar. Kamera bunu yapamaz: bir sertifika – yaprağı – yükler ve sunar ve CA’nın size verdiği ara sertifika(lar)ı da gönderemez.
Gerçekte göreceğiniz dosya adları:
certbotgibi bir ACME aracıprivkey.pem(anahtarınız),cert.pem(yalnızca yaprak),chain.pem(yalnızca ara sertifika(lar)) vefullchain.pem(yaprak + ara sertifika(lar)) yazar. Ticari bir CA genellikle size yaprak için bir.crtve ara sertifika(lar) için bir.ca-bundleverir;.keyise kendinizin oluşturduğudur.Dönüştürün ve kopyalayın. Özel anahtarı ve yaprak sertifikayı DER’e dönüştürün ve tam olarak Kendinden imzalı sertifikalar sayfasındaki gibi kameraya kopyalayın. Kamera daha sonra bunları sunucu sertifikası olarak sunar ve standart istemciler bağlantıyı otomatik olarak kabul eder, çünkü CA’ya zaten güvenirler – istemci tarafında hiçbir yapılandırmaya gerek yoktur.
Tüyo
Uygulamada, yalnızca yaprağı sunan (ve ara sertifikaları asla sunmayan) kamera şöyle işler:
CA’nın ara sertifikasını zaten önbelleğe almış istemciler – ana akım tarayıcılar ve HTTPS kütüphaneleri genellikle bunu yapar – zinciri kendileri tamamlar ve sorunsuz bağlanır.
Ara sertifikayı sağlamak için sunucuya güvenen istemciler, kameraya karşı el sıkışmada başarısız olur.
Olası her istemcinin başarılı olması gerekiyorsa, genel TLS’i doğrudan kamerada sonlandırmayın. Önüne, tam zinciri dış dünyaya sunan bir ağ geçidi / ters proxy yerleştirin ve proxy’nin kameraya yukarıda açıklanan kendinden imzalı akış üzerinden ulaşmasını sağlayın.