Pada Chrome 58, ia tidak lagi menerima sertifikat yang ditandatangani sendiri yang bergantung pada Common Name
: https://productforums.google.com/forum/#!topic/chrome/zVo3M8CgKzQ;context-place=topicsearchin/chrome/category $ 3Atas% 7Csort: relevansi% 7Cspell: false
Sebaliknya itu membutuhkan penggunaan Subject Alt Name
. Saya sebelumnya telah mengikuti panduan ini tentang cara membuat sertifikat yang ditandatangani sendiri: https://devcenter.heroku.com/articles/ssl-certificate-self yang bekerja sangat baik karena saya memerlukan server.crt
dan server.key
file untuk apa yang saya lakukan. Saya sekarang perlu membuat sertifikat baru yang mencakup SAN
namun semua upaya saya untuk melakukannya belum berfungsi dengan Chrome 58.
Inilah yang telah saya lakukan:
Saya mengikuti langkah-langkah pada artikel Heroku yang disebutkan di atas untuk menghasilkan kunci. Saya kemudian menulis file konfigurasi OpenSSL baru:
[ req ]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = san
extensions = san
[ req_distinguished_name ]
countryName = US
stateOrProvinceName = Massachusetts
localityName = Boston
organizationName = MyCompany
[ san ]
subjectAltName = DNS:dev.mycompany.com
Kemudian dihasilkan server.crt
dengan perintah berikut:
openssl req \
-new \
-key server.key \
-out server.csr \
-config config.cnf \
-sha256 \
-days 3650
Saya menggunakan Mac, jadi saya membuka server.crt
file dengan Keychain, menambahkannya ke Sertifikat Sistem saya. Saya kemudian mengaturnya Always Trust
.
Dengan pengecualian file konfigurasi untuk menetapkan nilai SAN, ini adalah langkah-langkah serupa yang saya gunakan di versi Chrome sebelumnya untuk menghasilkan dan memercayai sertifikat yang ditandatangani sendiri.
Namun, setelah ini saya masih mendapatkan ERR_CERT_COMMON_NAME_INVALID
di Chrome 58.
sumber
-config <(cat /System/Library/OpenSSL/openssl.cnf ; printf '[SAN]\nsubjectAltName=DNS:dev.mycompany.com')
dev.company.name
menjadilocalhost
dan ini berfungsi untuk melayani situs pengembangan lokal dari localhost. Di macOS saya juga harus menambahkan sertifikat ke Keychain dan mengatur SSL ke "Always Trust".Di Windows, simpan skrip ini di folder SSL Anda sebagai makeCERT.bat. Ini akan membuat file-file ini: example.cnf, example.crt, example.key
sumber
Ini solusi yang cocok untuk saya:
Buat kunci CA dan sertifikat
Buat server_rootCA.csr.cnf
Buat file konfigurasi v3.ext
Buat kunci server
Buat server cert
Tambahkan cert dan kunci ke file situs Apache2, HTTPS (port 443)
Salin server_rootCA.pem dari server ke mesin Anda ..
.. dan menambahkannya ke browser Chromium
ANDA SEMUA DILAKUKAN!
PS Alih-alih membuat CA & server cert pasangan fungsional (sesuai instruksi di atas) Anda cukup menonaktifkan header HSTS di konfigurasi server HTTP Anda. Ini akan mencegah Chromium dari menegakkan HTTPS dan akan memungkinkan pengguna untuk mengeklik "Lanjutan → melanjutkan ke your.url (tidak aman)" tanpa harus mendapatkan dan menginstal sertifikat CA (server_rootCA.pem) khusus Anda. Dengan kata lain - harus menonaktifkan HSTS akan memungkinkan situs Anda dilihat publik melalui HTTP dan / atau koneksi HTTPS tidak aman (waspadalah!).
Untuk Apache2 tambahkan berikut ini ke file situs, HTTP (port 80)
Diuji pada Debian / Apache2.4 + Debian / Chromium 59
https://ram.k0a1a.net/self-signed_https_cert_after_chrome_58
sumber
-config <( cat server_rootCA.csr.cnf )
bukan-config server_rootCA.csr.cnf
?Ada beberapa jawaban hebat yang memberikan contoh cara agar ini berfungsi, tetapi tidak ada yang menjelaskan di mana ada yang salah dalam upaya Anda. OpenSSL dapat menjadi sangat tidak intuitif beberapa kali sehingga layak untuk dilalui.
Pertama, sebagai tambahan, OpenSSL default untuk mengabaikan nilai-nilai nama berbeda apa pun yang Anda berikan dalam konfigurasi. Jika Anda ingin menggunakannya, Anda harus menambahkan
prompt = no
ke konfigurasi Anda. Selain itu, perintah yang ditulis hanya menghasilkan permintaan sertifikat, bukan sertifikat itu sendiri, sehingga-days
perintah tidak melakukan apa-apa.Jika Anda membuat permintaan sertifikat menggunakan perintah yang Anda berikan dan memeriksa hasilnya, Nama Alt Subjek ada:
Tetapi jika Anda membuat sertifikat menggunakan perintah di tautan heroku dan memeriksa hasilnya, Nama Alt Subjek tidak ada:
Alasannya adalah bahwa secara default OpenSSL tidak menyalin ekstensi dari permintaan ke sertifikat. Biasanya, sertifikat akan dibuat / ditandatangani oleh CA berdasarkan permintaan dari pelanggan, dan beberapa ekstensi dapat memberikan sertifikat lebih banyak kekuatan daripada yang dimaksudkan CA jika mereka mempercayai secara membuta ekstensi yang ditentukan dalam permintaan.
Ada cara untuk memberi tahu OpenSSL untuk menyalin ekstensi, tetapi IMHO itu lebih berfungsi daripada hanya memberikan ekstensi dalam file konfigurasi ketika Anda menghasilkan sertifikat.
Jika Anda mencoba menggunakan file konfigurasi yang ada, itu tidak akan berfungsi karena bagian tingkat atas ditandai
[req]
sehingga pengaturan itu hanya berlaku untuk perintah req, bukan perintah x509. Tidak perlu memiliki penanda bagian tingkat atas, jadi Anda bisa menghapus baris pertama itu, dan kemudian akan berfungsi dengan baik untuk menghasilkan permintaan atau sertifikat.Sebagai alternatif, Anda dapat menggunakan
-x509
argumen kereq
perintah untuk menghasilkan sertifikat yang ditandatangani sendiri dalam satu perintah, daripada terlebih dahulu membuat permintaan dan kemudian sertifikat. Dalam hal ini tidak perlu untuk menghapus[req]
baris bagian, karena bagian itu dibaca dan digunakan oleh perintah req.Untuk rekap, berikut adalah file konfigurasi yang dimodifikasi yang digunakan dalam perintah di atas:
sumber
Solusi saya adalah mempertahankan yang utama
openssl.cnf
seperti itu dan pada akhirnya menambahkan bagian baru seperti di[ cert_www.example.com ]
mana www.example.com adalah situs web yang ingin saya buat sertifikat, dan di dalamnya, masukkan yangsubjectAltName
saya perlukan (dan ada yang lain). Tentu saja bagian itu dapat dinamai apa pun yang Anda inginkan.Setelah itu, saya dapat menjalankan
openssl req
perintah seperti sebelumnya, cukup menambahkan-extensions cert_www.example.com
kontennya untuk diambil dan saya tambahkan-subj
untuk menambahkan secara langsung semua info DN.Jangan lupa memverifikasi konten sertifikat setelah dibuat dan sebelum digunakan, dengan
openssl x509 -text
sumber
Script Bash dengan config yang dibuat
Sebagai skrip shell yang seharusnya bekerja lintas platform dengan bash. Mengasumsikan
HOSTNAME
env ditetapkan untuk shell atau menyediakan nama host yang Anda pilih, misalnyaself_signed_cert.sh test
Yang di atas kurang lebih menyuntikkan info file konfigurasi minimum telanjang openssl kebutuhan.
Catatan, termasuk ekstra
DNS:localhost
sebagai SAN untuk memungkinkan pengujian melalui localhost lebih mudah. Hapus bit ekstra dari skrip jika Anda tidak menginginkannya.Kredit
Jawaban bcardarella luar biasa (tidak dapat berkomentar / memilih karena perwakilannya tidak mencukupi). Namun, jawabannya menggunakan lokasi file config openssl yang ada khusus platform ... karenanya:
Jelas, seseorang hanya perlu menemukan file konfigurasi openssl untuk platform Anda sendiri dan mengganti lokasi yang benar.
Uji
Untuk cara menguji, impor
test.cert.pem
ke otoritas chrome dichrome://settings/certificates
, dan:Dan setelah pengujian
sumber