Cara penerapan SSL yang benar di localhost

10

Adakah yang bisa menyarankan cara modern menghasilkan sertifikat yang ditandatangani sendiri untuk diterapkan di localhost, yang akan diterima oleh Chrome dan Mozilla?

Saya mencoba generasi openssl, namun Mozilla mengeluh bahwa penerbitnya tidak dipercaya.

Centos 7, nginx

Tarlan Mammadzada
sumber
Gunakan Let's Encrypt .
Thomas
2
Ini domain lokal, Mari kita mengenkripsi hanya berfungsi pada terdaftar
Tarlan Mammadzada
2
Arahkan ke situs, klik lanjut, dan klik tambahkan pengecualian.
Richard Smith
1
Anda ingin terlihat aman, Anda akan membutuhkan CA yang ditandatangani sendiri dan menggunakannya untuk menandatangani sertifikat server Anda, lalu Anda bisa menambahkan CA ke toko kepercayaan browser.
Richard Smith
1
Tampaknya Firefox telah berhenti menerima sertifikat yang ditandatangani sendiri. Seperti yang dikatakan @RichardSmith, Anda harus menggunakan Otoritas Sertifikasi untuk menghasilkan sertifikat Anda. Sebelum Anda terjun ke ladang ranjau itu, Anda mungkin perlu mempelajari implikasi keamanan pengoperasian Otoritas Anda sendiri.
garethTheRed

Jawaban:

9

Peringatan: Sebelum Anda terjun ke ladang ranjau menjalankan Otoritas Sertifikasi Anda sendiri, Anda mungkin perlu mempelajari implikasi keamanan!

Tetapi jika Anda harus, baca terus untuk CA cepat dan kotor yang akan memberi Anda https://localhost/tanpa pesan peringatan ...

Buat file teks berikut:

# OpenSSL configuration for Root CA

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name
x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = Test Root CA

[ x509_ext ]

basicConstraints=critical,CA:true,pathlen:0
keyUsage=critical,keyCertSign,cRLSign

Simpan sebagai root.cnflalu hasilkan permintaan dengan:

$ openssl req -x509 -new -keyout root.key -out root.cer -config root.cnf

Ini akan membuat sertifikat Root CA Anda ( root.cer) dan kunci pribadi Root CA Anda ( root.key) yang harus Anda jaga tetap pribadi. Ini akan meminta kata sandi untuk kunci pribadi - pastikan Anda memilih yang kuat.

Sekarang buat file config untuk sertifikat server:

# OpenSSL configuration for end-entity cert

[ req ]

prompt             = no
string_mask        = default

# The size of the keys in bits:
default_bits       = 2048
distinguished_name = req_distinguished_name

x509_extensions    = x509_ext

[ req_distinguished_name ]

# Note that the following are in 'reverse order' to what you'd expect to see.

countryName = gb
organizationName = Test
commonName = localhost

[ x509_ext ]

keyUsage=critical,digitalSignature,keyAgreement

subjectAltName = @alt_names

# Multiple Alternate Names are possible
[alt_names]
DNS.1 = localhost
# DNS.2 = altName.example.com

Simpan sebagai server.cnfdan hasilkan permintaan dengan:

openssl req -nodes -new -keyout server.key -out server.csr -config server.cnf

Di atas akan menghasilkan kunci pribadi lain ( server.key) yang harus Anda lindungi. Dalam hal ini, kuncinya tidak dilindungi kata sandi, tetapi Anda dapat menambahkan kata sandi dengan menghapus -nodesopsi.

Terakhir, tandatangani permintaan dengan CA Root baru Anda dan ekstensi dari server.cnffile (untuk kenyamanan):

$ openssl x509 -req -in server.csr -CA root.cer -CAkey root.key -set_serial 123 -out server.cer -extfile server.cnf -extensions x509_ext

Catatan: pilih nomor acak apa saja untuk -set_serialopsi tersebut.

Ia akan meminta kata sandi yang Anda masukkan saat membuat CA Root.

Sertifikat server ( server.cer) akan dibuat.

Sekarang, tambahkan sertifikat Root CA ( root.cer) ke toko anchor trust Firefox dan jalankan tes dengan:

$ sudo openssl s_server -key server.key -cert server.cer -accept 443 -www

Catatan: Anda mungkin mendapatkan kesalahan jika Anda telah memiliki server yang berjalan di port 443. Dalam hal ini, hentikan server yang sedang berjalan atau ubah nomor port di atas ke port lain yang tidak digunakan.

Ketika Anda berpindah ke https://localhost(atau https://localhost:<port>jika Anda mengubah nomor port di atas) dengan Firefox, Anda seharusnya sekarang tidak melihat peringatan dan disajikan daftar sandi yang bisa ditawarkan oleh instalasi OpenSSL Anda.

Setelah Anda puas dengan hasilnya, tambahkan server.keydan server.cerke server web Anda dan konfigurasikan sesuai.

garethTheRed
sumber
1
Ada salah ketik; stinguished_nameseharusnyadistinguished_name
user281357