Webship bloguna geri dön

Webship mühendisliği

Webship'te TLS Sertifikaları: Gömülü ACME CA

Webship 1.4.0'ın gömülü CA'sı ile özel site başına TLS sertifikalarını nasıl çıkardığını ve döndürdüğünü, istemci güveninin nasıl çalıştığını ve gömülü kimliklerin genel ACME ve manuel sertifikalarla nasıl bir arada var olduğunu görün.

# Webship'te TLS Sertifikaları: Gömülü ACME CA

Bir TLS sertifikası iki iş yapar: bir bağlantıyı şifrelemeye yardımcı olur ve istemciye kiminle konuştuğunu söyler. Şifreleme güçlü olabilirken, güven kararı hedef kitle için yanlış olabilir. Bu yüzden sertifika otomasyonu bir soruyla başlamalıdır: Bu siteye kim güvenmelidir?

Webship 1.4.0, her yapılandırılmış site için bu seçimi bağımsız olarak yapar. Halka açık bir web sitesi, tarayıcı tarafından güvenilen bir ACME sertifikası kullanabilir, bir dahili servis Webship’in gömülü özel sertifika otoritesini kullanabilir ve mevcut bir PKI’ye sahip bir site, operatör tarafından yönetilen sertifika dosyalarını tutabilir. Hepsi, tek bir Webship sürecini paylaşabilir, ancak tek bir özel anahtar veya tek bir güven sınırını paylaşmazlar.

Site başına seçilen dört otomatik sertifika modu

certificate_mode alanı her [[sites]] girişine aittir. Bu, küresel bir anahtar değildir.

| Mod | Güvenilen kaynak | En uygun | Doğrulama yolu | | --- | --- | --- | --- | | per_site | Genel tarayıcı ve işletim sistemi güven deposu | Tek bir tam ana bilgisayar adına sahip genel bir site | Genel ACME ile TLS-ALPN-01 | | filo | Genel tarayıcı ve işletim sistemi güven deposu | Açıkça kayıtlı alan adları altındaki üçüncü ve dördüncü seviye büyük isim setleri | DNS-01 ile genel ACME ve istikrarlı sertifika parçaları | | gömülü | Operatör tarafından kurulan özel bir Webship kökü | Dahili servisler, yönetilen cihazlar, özel filolar ve test ortamları | Süreç içinde verilme; dış zorlama yok | paylaşılan | Genel tarayıcı ve işletim sistemi güven deposu | Bilerek tek bir genel çoklu SAN grubunu kullanan eski dağıtımlar | TLS-ALPN-01 ile Genel ACME |

Varsayılan per_site modudur. Siteye ait tam adı için bir genel sertifika sipariş eder. Fleet modu, birçok derin alt alan için ölçeklenebilir genel seçenektir. Embedded modu, Webship’in özel işlem içi CA'sını kullanır. Shared modu uyumluluk için kullanılabilir durumda kalır, ancak varsayılan değildir.

[sites.tls] altındaki eksiksiz bir sertifika ve anahtar, her zaman o site için otomatik verilmeye öncelik tanır.

“Gömülü ACME CA” ne demek

Yapılandırma bölümü [acme_ca] olarak adlandırılmıştır, ancak gömülü CA bir açık veya ağ erişilebilir ACME hizmeti değildir. Herhangi bir dizin uç noktası sunmaz, uzak kayıt kabul etmez, herhangi bir kayıt defteri API'sini çağırmaz ve kontrol kanıtı zorluğu gerçekleştirmez.

Bunun yerine, Webship tüm özel ihraç yolunu tek bir süreçte tutar:

  1. Site certificate_mode = "embedded" seçer.
  2. Webship, yapılandırılmış durum dizininde özel kök kimliğini yükler veya oluşturur.
  3. Webship site için yeni bir özel anahtar oluşturur.
  4. Gömülü kök, tam olarak o isim için bir yaprak sertifikası imzalar.
  5. Webship, tamamlanmış kimliği canlı TLS çözücüsüne yüklemeden önce doğrular.
  6. Sertifika daha sonra o site için etkinleştirilmiş her protokol tarafından kullanılabilir hale gelir.

ACME tarzı bir ağ testi yalnızca Webship için bir kanıt olurdu, bu nedenle gömülü yol bilerek herhangi bir ağ protokolü içermez. [acme_ca] bölümü özel PKI durumudur: kökün nerede bulunduğunu ve verilen alt sertifikaların ne kadar süre geçerli olacağını tanımlar.

Bir site için gömülü bir sertifika yapılandırın

Bu, özel bir site için minimum şekildir:

~~~toml dinle = "0.0.0.0:443"

[tls] unknown_sni = "reddet"

[otomatik_tls] etkin = doğru cache_dir = "/var/lib/webship/acme"

[acme_ca] state_dir = "/var/lib/webship/acme-ca" leaf_geçerlilik_günleri = 90

[[siteler]] domain = "service.internal.example" root = "/srv/service" certificate_mode = "gömülü"

[siteler.protokoller] h1 = doğru h2 = doğru h3 = doğru ~~~

Kök kimliği, gömülü bir site ilk ihtiyaç duyduğunda tembel bir şekilde oluşturulur. Webship, kök anahtarı state_dir içinde sınırlayıcı izinlerle kalıcı hale getirir. Kök sertifikanın ömrü on yıldır; yaprak ömrü leaf_validity_days ile kontrol edilir.

Her iki depolama alanını da üretim durumu olarak kabul edin:

  • ACME önbelleği, otomatik olarak yönetilen site kimliklerini tutar.
  • Gömülü-CA durum dizini özel kök kimliğini barındırır.
  • Hizmet hesabının erişime ihtiyacı var, ancak uygulama kullanıcılarının yok.
  • Yedeklemeler gizliliği ve dosya izinlerini korumalıdır.
  • Üretim, geliştirme ve test için ayrı kökler ve ayrı dizinler kullanılmalıdır.

Kök dizini silmek “TLS’i sıfırlamaz.” Yeni bir güven kökü oluşturur. Eski köke güvenen istemciler, güven depoları güncellenene kadar yerine konulan tarafından verilen sertifikaları reddeder.

Özel güven, kasıtlıdır

Gömülü CA'dan gelen sertifikalar, genel tarayıcılar veya işletim sistemleri tarafından otomatik olarak güvenilir kabul edilmez. Yalnızca operatör, dışa aktarılan Webship kök sertifikasını istemcinin güven deposuna yükledikten sonra güvenilir hale gelirler.

Bu, gömülü modu şunlar için uygun hale getirir:

  • cihaz yönetimi aracılığıyla kaydedilmiş şirket tarafından yönetilen dizüstü bilgisayarlar ve telefonlar;
  • açık bir CA paketi ile dahili hizmetten hizmete trafik;
  • özel cihazlar ve kontrollü uç filo;
  • gerçek TLS davranışını çalıştırması gereken geliştirme ve test ortamları;
  • kamu CA'sına güvenemeyen bağlantısız ağlar.

Ziyaretçilerin yönetilmeyen tarayıcılar kullandığı sıradan bir kamu web sitesi için doğru mod değildir. Kesin bir genel ad için genel site başına sertifika verme, büyük kamu alt alan adı setleri için filo sertifikası verme, sadece kasıtlı bir eski çoklu SAN dağıtımı için paylaşılan veya zaten güvenilen bir PKI'den manuel dosyalar kullanın.

Yalnızca kök sertifikasını istemcilere dağıtın. Kök özel anahtarını asla dağıtmayın. Bu anahtarın sahibi olmak, tüm kayıtlı istemciler tarafından güvenilen kimlikleri verme yetkisi sağlar.

Kamu ve özel sertifikalar bir arada var olabilir

Webship 1.4.0 aynı dinleyicide sertifika stratejilerini karıştırabilir:

~~~toml dinle = "0.0.0.0:443"

[tls] unknown_sni = "reddet"

[otomatik_tls] etkin = doğru directory_url = "https://acme-v02.api.letsencrypt.org/directory" cache_dir = "/var/lib/webship/acme" contacts = ["mailto:ops@example.com"] hizmet_sartlarini_kabul_et = true

[acme_ca] state_dir = "/var/lib/webship/acme-ca" yaprak_geçerlilik_günleri = 90

[[siteler]] domain = "www.example.com" root = "/srv/public" certificate_mode = "site_başına"

[[siteler]] domain = "control.internal.example" root = "/srv/control" certificate_mode = "gömülü"

[[siteler]] domain = "payments.example.com" root = "/srv/payments"

[siteler.tls] cert = "/etc/webship/payments-fullchain.pem" anahtar = "/etc/webship/payments-private-key.pem" ~~~

Burada, www.example.com kendi genel ACME sertifikasını alır. control.internal.example gömülü CA'dan özel bir sertifika alır. payments.example.com, açık dosyaları öncelikli olduğu için operatörün dış PKI'si altında kalır.

Genel ACME dizini gömülü siteler tarafından göz ardı edilir. Gömülü kök hiçbir zaman genel siteyi imzalamaz. Manuel site hiçbir zaman otomatik iş akışına sessizce dahil edilmez.

H1, H2, H3 ve WebTransport için bir sertifika çözücü

Sertifika seçimi, bir HTTP isteği oluşmadan önce, TLS el sıkışması sırasında gerçekleşir. Webship, site kimliğini seçmek için ClientHello sunucu adını kullanır ve ardından uygulama protokolünü müzakere eder.

  • HTTP/1.1 ve HTTP/2, TCP üzerinden TLS kullanır.
  • HTTP/3 ve WebTransport, UDP üzerinden QUIC içinde TLS kullanır.
  • Bir geçerli site kimliği, etkinleştirilen her protokol için kullanılabilir.
  • HTTP/3 ayrıca UDP erişilebilirliğini gerektirir; H1 ve H2 TCP yolunu kullanır.
  • Alt-Svc, bir TCP geri dönüşünü korurken H3'ü duyurabilir.

TCP, TLS ve QUIC aynı site farkında kimlik modelini kullanır. Kesin isimler önceliklidir, joker sertifikaların yapılandırıldığı yerlerde en uzun geçerli joker kazanır ve bilinmeyen isimli SNI, ilgisiz bir varsayılan sertifika almak yerine reddedilebilir.

Tanınmayan bir ana bilgisayar adı başarısız olduğunda kapalı olması gereken çok siteli bir dinleyicide unknown_sni = "reject" kullanın. Üretim dağıtımından önce tanınan adları, tanınmayan adları ve beklenen no-SNI davranışınızı test edin.

Gömülü kimlikleri servis boşluğu olmadan döndür

Webship, sertifika durumunu ve kontrol edilen değişiklikleri, kimlik doğrulamalı ve döngüye bağlı MCP sunucusu aracılığıyla ortaya çıkarır:

  • webship.tls.get_status, aktif sertifika çözücüyü ve yenileme durumunu rapor eder.
  • webship.tls.reissue_certificate, yalnızca o site gömülü modu kullandığında otomatik olarak yönetilen bir siteyi hemen yeniden verir.
  • webship.tls.reload normal korumalı TLS yolu üzerinden sertifika durumunu yeniden yükler.
  • webship.acme_ca.status, özel CA'nın seçilip seçilmediğini, durum dizinini, yaprak ömrünü, ihraç sayısını, iptal sayısını ve yakın zamanda kullanılan alan adı örneklerini raporlar.
  • webship.sites.apply sabitlenmiş bir yapılandırma sürümüne karşı siteler ekler veya çıkarır.

Gömülü bir yeniden yayın için, Webship ikameleri oluşturur ve doğrular, ardından hizmete geçmeden önce değiştirir. Mevcut geçerli kimlik, yeni kimlik hazır olana kadar hizmet vermeye devam eder. Emekli olan kimlik, yalnızca ikame kurulduktan sonra kaydedilir.

Anlık tekrar sürüm işlemi, kasıtlı olarak genel per_site sertifikalarını reddeder. Genel yenileme, özel işlemde imzalama ile karıştırılmak yerine genel ACME yaşam döngüsü içinde kalmalıdır. Paylaşılan mod üyeliği de yeniden başlatma sırasında dondurulmuştur çünkü çoklu SAN grubu değiştirmek kimlik sınırını yeniden oluşturur.

MCP ayrıcalıklı bir kontrol yüzeyidir. Döngüye alın, TLS ve güçlü bir taşıyıcı belirteci gerektir, uzaktan yönetim için kimlik doğrulamalı bir tünel kullan ve her değişikliği denetle.

Önemli olan başarısızlık sınırları

Güvenli bir sertifika sistemi doğru yönde başarısız olmalıdır.

  • Yeni yapılandırılmış gömülü bir site, düzenleme beklerken başka bir sitenin kimliğini almaz.
  • Geçersiz bir yedekleme, çalışan bir sertifikanın üzerine yüklenmez.
  • Açık manuel dosyalar, o sitenin otomatik sahipliğini engeller.
  • Bilinmeyen adlandırılmış SNI, HTTP yönlendirmesinden önce reddedilebilir.
  • Gömülü CA özel kalır ve uzaktan kayıt noktası yoktur.
  • Genel ve gömülü kimlikler, otomatik-TLS durumu içinde ayrı önbellek yolları kullanır.

Gömülü CA'nın başlatılmadığına dair bir uyarı, Webship'in yapılandırılmış durum dizinini etkinleştiremediği anlamına gelir. İlgili siteye trafik göndermeden önce sahiplik, izinler, kalıcılık veya depolama kullanılabilirliğini düzeltin. Başka bir ortamın kök anahtarını kopyalayarak hatayı geçiştirmeyin.

Üretim kontrol listesi

Gömülü modu etkinleştirmeden önce:

  1. Siteye güvenmesi gereken her müşteri kitlesini belirleyin.
  2. Kök sertifikayı dışa aktarmak ve yüklemek için kontrollü bir süreç oluşturun.
  3. Üretim, geliştirme ve test için ayrı kök durumu kullanın.
  4. Gömülü CA durum dizinini ve otomatik TLS önbelleğini koruyun ve sürdürün.
  5. Webship'i yalnızca gerekli anahtar materyaline erişimi olan özel bir hizmet hesabı altında çalıştırın.
  6. Güven sınırının açıkça belirtilmesi gereken her sitede certificate_mode'u seçin.
  7. Bilinmeyen SNI politikasını ayarla ve test et.
  8. H1, H2 ve H3'ü kasıtlı olarak etkinleştirin ve hem TCP hem de UDP yollarını doğrulayın.
  9. Egzersiz yeniden yayımı, yeniden başlatma, yedekleme, geri yükleme ve üretim dışı istemci-güven doğrulaması.
  10. Dağıtımdan önce webship --check-config çalıştırın, ardından gerçek bir istemciden çıkarıcıyı, adları, geçerliliği, zinciri ve müzakere edilen protokolleri doğrulayın.

Önce güveni seçin, sonra otomasyonu

Gömülü CA, özel altyapı için harici bir sertifika hizmeti bağımlılığını ortadan kaldırır. Bir özel kökü küresel olarak güvenilir hale getirmez ve işletmecinin PKI sorumluluklarını ortadan kaldırmaz.

Webship, anahtar oluşturmayı, imzalamayı, doğrulamayı, yüklemeyi, döndürmeyi ve protokol genelinde sertifika seçimini otomatikleştirir. Operatör hâlâ kök denetimini, istemci kaydını, ortam ayırmayı, yedeklemeyi, kurtarmayı ve bir genel veya özel güven yolu kullanma kararını elinde tutar.

O ayrım özelliktir. Kendi kendine yeten bir sunucu, halka açık bir CA gibi davranmadan özel TLS otomatikleştirebilir ve halka açık siteler yine aynı süreçte tarayıcı tarafından güvenilen site başına veya grup bazlı sertifika verme işlemini kullanabilir.

Dağıtımdan önce sürümlü Webship 1.4.0 dokümantasyonunu okuyun. RFC 5280 sertifika profillerini ve doğrulamayı tanımlar, RFC 6066 TLS sunucu adı sinyallemesini tanımlar, RFC 8446 TLS 1.3'ü tanımlar, RFC 8555 genel ACME'yi tanımlar ve RFC 9525 servis kimliği doğrulamasını tanımlar.