Kembali ke blog Webship

Kejuruteraan Webship

Sijil TLS dalam Webship: ACME CA Terbenam

Lihat bagaimana Webship 1.4.0 mengeluarkan dan memusingkan sijil TLS per-laman swasta dengan CA terbina dalamnya, bagaimana kepercayaan klien berfungsi, dan bagaimana identiti terbina dalam wujud bersama dengan sijil ACME awam dan manual.

# Sijil TLS dalam Webship: ACME CA Terbenam

Sijil TLS melakukan dua tugas: ia membantu menyulitkan sambungan dan memberitahu klien identiti yang sedang dihubungi. Penyulitan boleh menjadi kuat walaupun keputusan kepercayaan salah untuk audiens. Itu sebabnya automasi sijil mesti bermula dengan satu soalan: siapa yang mesti mempercayai laman ini?

Webship 1.4.0 membuat pilihan itu secara bebas untuk setiap tapak yang dikonfigurasikan. Laman web awam boleh menggunakan sijil ACME yang dipercayai pelayar, perkhidmatan dalaman boleh menggunakan pihak berkuasa sijil persendirian terbina dalam Webship, dan tapak yang mempunyai PKI sedia ada boleh mengekalkan fail sijil yang diuruskan oleh pengendali. Kesemuanya boleh berkongsi satu proses Webship tanpa berkongsi satu kunci persendirian atau satu sempadan kepercayaan.

Empat mod sijil automatik, dipilih mengikut tapak

Medan certificate_mode milik setiap entri [[sites]]. Ia bukan suis global.

| Mod | Sumber dipercayai | Padanan terbaik | Laluan pengesahan | | --- | --- | --- | --- | | per_site | Kedai kepercayaan pelayar dan sistem operasi awam | Laman awam dengan satu nama hos tepat | ACME awam dengan TLS-ALPN-01 | | armada | Penyemak imbas awam dan stor kepercayaan sistem pengendalian | Set besar nama peringkat ketiga dan keempat di bawah domain yang didaftarkan secara jelas | ACME awam dengan DNS-01 dan cebisan sijil yang stabil | | terbina dalam | Akar Webship peribadi yang dipasang oleh pengendali | Perkhidmatan dalaman, peranti terkawal, armada peribadi, dan persekitaran ujian | Penerbitan dalam proses; tiada cabaran luaran | | dikongsi | Kedai kepercayaan pelayar dan sistem operasi awam | Penyebaran lama yang sengaja menggunakan satu kumpulan multi-SAN awam | ACME awam dengan TLS-ALPN-01 |

Default adalah per_site. Ia menempah satu sijil awam untuk nama tepat laman web itu. Mod Fleet adalah pilihan awam yang boleh diskala untuk banyak subdomain mendalam. Mod Terbenam menggunakan CA peribadi dalam proses Webship. Mod Berkongsi masih tersedia untuk keserasian, tetapi ia bukan lalai.

Sijil dan kunci lengkap di bawah [sites.tls] sentiasa diutamakan berbanding pengeluaran automatik untuk tapak itu.

Apa maksud “ACME CA tersirat”

Bahagian konfigurasi dinamakan [acme_ca], tetapi CA terbina dalam bukanlah perkhidmatan ACME awam atau boleh diakses rangkaian. Ia tidak mendedahkan sebarang titik akhir direktori, tidak menerima pendaftaran jarak jauh, tidak memanggil sebarang API pendaftar, dan tidak melaksanakan sebarang cabaran bukti kawalan.

Sebaliknya, Webship mengekalkan keseluruhan laluan pengeluaran peribadi dalam satu proses:

  1. Laman itu memilih certificate_mode = "embedded".
  2. Webship memuat atau membuat identiti akar peribadi dalam direktori keadaan yang dikonfigurasikan.
  3. Webship menjana kunci peribadi baru untuk tapak tersebut.
  4. Akar terpateri menandatangani sijil daun untuk nama yang tepat itu.
  5. Webship mengesahkan identiti yang lengkap sebelum memasangnya dalam penyelesai TLS langsung.
  6. Sijil itu kemudian tersedia untuk setiap protokol yang diaktifkan bagi tapak tersebut.

Cabaran rangkaian gaya ACME hanya akan membuktikan Webship kepada dirinya sendiri, jadi laluan terbenam sengaja tidak mempunyai protokol rangkaian. Bahagian [acme_ca] adalah keadaan PKI peribadi: ia mentakrifkan di mana akar berada dan berapa lama sijil daun yang dikeluarkan akan kekal sah.

Konfigurasikan sijil terbenam untuk satu laman

Ini adalah bentuk minimum untuk tapak peribadi:

~~~toml dengar = "0.0.0.0:443"

[tls] unknown_sni = "tolak"

[automatik_tls] diaktifkan = benar cache_dir = "/var/lib/webship/acme"

[acme_ca] state_dir = "/var/lib/webship/acme-ca" hari_sah_lesen_cuti = 90

[[tapak]] domain = "service.internal.example" root = "/srv/service" certificate_mode = "terbenam"

[tapak.protokol] h1 = benar h2 = benar h3 = benar ~~~

Identiti akar dicipta secara malas apabila tapak tertanam pertama kali memerlukannya. Webship mengekalkan kunci akar dengan kebenaran yang terhad di state_dir. Sijil akar mempunyai jangka hayat sepuluh tahun; jangka hayat daun dikawal oleh leaf_validity_days.

Layan kedua-dua lokasi penyimpanan sebagai keadaan pengeluaran:

  • Cache ACME memegang identiti tapak yang diurus secara automatik.
  • Direktori negeri CA-terbenam menyimpan identiti akar peribadi.
  • Akaun perkhidmatan memerlukan akses, tetapi pengguna aplikasi tidak.
  • Simpanan sandaran mesti mengekalkan kerahsiaan dan kebenaran fail.
  • Pengeluaran, pembangunan, dan ujian harus menggunakan akar dan direktori yang berasingan.

Memadam direktori root tidak akan “menetapkan semula TLS.” Ia mencipta jangkar kepercayaan baru. Klien yang mempercayai root lama akan menolak sijil yang dikeluarkan oleh pengganti sehingga stor kepercayaan mereka dikemas kini.

Amanah persendirian adalah sengaja

Sijil daripada CA terbina dalam tidak dipercayai secara automatik oleh pelayar awam atau sistem operasi. Ia hanya menjadi dipercayai selepas pengendali memasang sijil akar Webship yang dieksport dalam stor kepercayaan pelanggan.

Itu menjadikan mod terpadu sesuai untuk:

  • komputer riba dan telefon yang diuruskan oleh syarikat dan didaftarkan melalui pengurusan peranti;
  • trafik dalaman antara perkhidmatan dengan bundel CA yang jelas;
  • peralatan peribadi dan armada tepi yang dikawal;
  • persekitaran pembangunan dan ujian yang mesti menggunakan kelakuan TLS sebenar;
  • rangkaian terpencil yang tidak dapat bergantung pada CA awam.

Ia bukan mod yang sesuai untuk laman web awam biasa yang pelawatnya menggunakan pelayar yang tidak diurus. Gunakan penerbitan per_laman awam untuk nama awam yang tepat, penerbitan armada untuk set subdomain awam yang besar, dikongsi hanya untuk penyebaran multi-SAN warisan yang disengajakan, atau fail manual daripada PKI yang sudah dipercayai.

Edarkan hanya sijil akar kepada pelanggan. Jangan sekali-kali mengedarkan kunci peribadi akar. Pemilikan kunci itu memberi kuasa kepada pemegangnya untuk mengeluarkan identiti yang dipercayai oleh setiap pelanggan yang berdaftar.

Sijil awam dan swasta boleh wujud bersama

Webship 1.4.0 boleh mencampur strategi sijil pada pendengar yang sama:

~~~toml dengar = "0.0.0.0:443"

[tls] unknown_sni = "tolak"

[automatik_tls] diaktifkan = benar directory_url = "https://acme-v02.api.letsencrypt.org/directory" cache_dir = "/var/lib/webship/acme" contacts = ["mailto:ops@example.com"] terima_syart_perkhidmatan = benar

[acme_ca] state_dir = "/var/lib/webship/acme-ca" hari_sah_daun = 90

[[tapak]] domain = "www.example.com" root = "/srv/public" certificate_mode = "setiap_laman"

[[tapak]] domain = "control.internal.example" root = "/srv/kawalan" certificate_mode = "terbenam"

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

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

Di sini, www.example.com menerima sijil ACME awamnya sendiri. control.internal.example menerima sijil persendirian daripada CA terbina dalam. payments.example.com kekal di bawah PKI luaran pengendali kerana fail eksplisitnya mempunyai keutamaan.

Direktori ACME awam diabaikan oleh laman terbenam. Akar terbenam tidak pernah menandatangani laman awam. Laman manual tidak pernah disertakan secara senyap ke dalam mana-mana aliran kerja automatik.

Satu penyelesai sijil untuk H1, H2, H3, dan WebTransport

Pemilihan sijil berlaku semasa jabat tangan TLS, sebelum wujud permintaan HTTP. Webship menggunakan nama pelayan ClientHello untuk memilih identiti laman dan kemudian merundingkan protokol aplikasi.

  • HTTP/1.1 dan HTTP/2 menggunakan TLS melalui TCP.
  • HTTP/3 dan WebTransport menggunakan TLS di dalam QUIC melalui UDP.
  • Satu identiti laman web yang sah boleh digunakan untuk setiap protokol yang diaktifkan.
  • HTTP/3 juga memerlukan kebolehcapaian UDP; H1 dan H2 menggunakan laluan TCP.
  • Alt-Svc boleh mengiklankan H3 sambil mengekalkan fallback TCP.

TCP TLS dan QUIC menggunakan model identiti sedar-laman yang sama. Nama tepat diutamakan, wildcard sah yang terpanjang menang apabila sijil wildcard dikonfigurasikan, dan SNI bernama yang tidak dikenali boleh ditolak daripada menerima sijil lalai yang tidak berkaitan.

Gunakan unknown_sni = "reject" pada pendengar multi-laman apabila hostname yang tidak dikenali mesti gagal ditutup. Uji nama yang dikenali, nama yang tidak dikenali, dan tingkah laku tiada-SNI yang dijangka sebelum pelaksanaan produksi.

Putar identiti terbenam tanpa jurang perkhidmatan

Webship mendedahkan status sijil dan mutasi terkawal melalui pelayannya yang sah dan terikat pada loopback MCP:

  • webship.tls.get_status melaporkan penyelesai sijil aktif dan keadaan pembaharuan.
  • webship.tls.reissue_certificate segera mengeluarkan semula sijil yang dikendalikan secara automatik hanya apabila tapak tersebut menggunakan mod terbina dalam.
  • webship.tls.reload memuat semula keadaan sijil melalui laluan TLS yang dilindungi secara normal.
  • webship.acme_ca.status melaporkan sama ada CA peribadi dipilih, direktori keadaannya, jangka hayat daun, kiraan pengeluaran, kiraan pembatalan, dan sampel domain terkini.
  • webship.sites.apply menambah atau mengeluarkan laman terhadap versi konfigurasi yang dipin.

Untuk pengeluaran semula tertanam, Webship mencipta dan mengesahkan pengganti sebelum menukarnya ke dalam perkhidmatan. Identiti sah semasa terus memberikan perkhidmatan sehingga identiti baru bersedia. Identiti yang bersara direkodkan hanya selepas pengganti dipasang.

Operasi pengeluaran semula segera dengan sengaja menolak sijil per_site awam. Pembaharuan awam mesti kekal di dalam kitaran hayat ACME awam daripada dikelirukan dengan penandatanganan proses peribadi. Keahlian mod-tersimpan bersama juga dibekukan semula kerana menukar kumpulan multi-SAN membina semula sempadan identiti.

MCP adalah permukaan kawalan yang istimewa. Kekalkannya dalam loopback, perlukan TLS dan token pembawa yang kukuh, gunakan terowong yang disahkan untuk pentadbiran jauh, dan audit setiap perubahan.

Had kegagalan yang penting

Sistem sijil yang selamat mesti gagal ke arah yang betul.

  • Laman tertanam yang baru dikonfigurasikan tidak menerima identiti laman lain sementara pengeluaran sedang ditangguhkan.
  • Penggantian yang tidak sah tidak dipasang di atas sijil yang berfungsi.
  • Fail manual yang jelas menghalang pemilikan automatik tapak tersebut.
  • SNI bernama yang tidak diketahui boleh ditolak sebelum penyaluran HTTP.
  • CA terbenam tetap peribadi dan tidak mempunyai titik akhir pendaftaran jauh.
  • Identiti awam dan terbina dalam menggunakan laluan cache berasingan di dalam keadaan TLS automatik.

Amaran bahawa CA terbenam tidak diinisialisasi bermaksud Webship tidak dapat mengaktifkan direktori negeri yang dikonfigurasikan. Betulkan pemilikan, kebenaran, ketahanan, atau ketersediaan penyimpanan sebelum menghantar trafik ke tapak yang terjejas. Jangan cuba mengatasi ralat dengan menyalin kekunci root persekitaran lain.

Senarai semak pengeluaran

Sebelum mengaktifkan mod terbina dalam:

  1. Kenal pasti setiap populasi pelanggan yang mesti mempercayai laman tersebut.
  2. Cipta proses terkawal untuk mengeksport dan memasang sijil akar.
  3. Gunakan keadaan akar yang berasingan untuk pengeluaran, pembangunan, dan ujian.
  4. Teruskan dan lindungi direktori status CA-terbenam dan cache TLS-automatik.
  5. Jalankan Webship di bawah akaun perkhidmatan khusus dengan akses hanya kepada bahan kunci yang diperlukan.
  6. Pilih certificate_mode di setiap laman web yang sempadan kepercayaannya mesti jelas.
  7. Tetapkan dan uji dasar SNI yang tidak diketahui.
  8. Dayakan H1, H2, dan H3 dengan sengaja dan sahkan kedua-dua laluan TCP dan UDP.
  9. Latih semula isu, mulakan semula, sandaran, pemulihan, dan pengesahan kepercayaan pelanggan di luar pengeluaran.
  10. Jalankan webship --check-config sebelum pelancaran, kemudian sahkan penerbit, nama, kesahihan, rantaian, dan protokol yang dirundingkan daripada klien sebenar.

Pilih kepercayaan dahulu, automasi kemudian

CA terbenam menghapuskan kebergantungan perkhidmatan sijil luaran untuk infrastruktur peribadi. Ia tidak menjadikan akar peribadi dipercayai secara global, dan ia tidak menghapuskan tanggungjawab PKI pengendali.

Webship mengautomasikan penjanaan kunci, menandatangani, pengesahan, pemasangan, putaran, dan pemilihan sijil di seluruh protokol. Operator masih memiliki pemilikan akar, pendaftaran klien, pemisahan persekitaran, sandaran, pemulihan, dan keputusan untuk menggunakan laluan amanah awam atau persendirian.

Pemisahan itu adalah ciri. Pelayan yang berdiri sendiri boleh mengautomasikan TLS peribadi tanpa berpura-pura menjadi CA awam—dan tapak awam masih boleh menggunakan penerbitan per-situs atau kumpulan yang dipercayai pelayar dalam proses yang sama.

Baca dokumentasi Webship 1.4.0 yang bermula versi sebelum pelaksanaan. RFC 5280 mentakrifkan profil sijil dan pengesahan, RFC 6066 mentakrifkan penandaan nama pelayan TLS, RFC 8446 mentakrifkan TLS 1.3, RFC 8555 mentakrifkan ACME awam, dan RFC 9525 mentakrifkan pengesahan identiti perkhidmatan.