Perbedaan antara SSLCertificateFile dan SSLCertificateChainFile?

35

Biasanya dengan host virtual ssl diatur dengan arahan berikut:

Listen 443 

SSLCertificateFile /home/web/certs/domain1.public.crt
SSLCertificateKeyFile /home/web/certs/domain1.private.key
SSLCertificateChainFile /home/web/certs/domain1.intermediate.crt

Dari: Untuk mengaktifkan SSL untuk satu domain di server dengan muliple vhosts, apakah konfigurasi ini akan berfungsi?

Apa perbedaan antara SSLCertificateFiledan SSLCertificateChainFile? Klien telah membeli kunci CA dari GoDaddy. Sepertinya GoDaddy hanya menyediakan SSLCertificateFile(file .crt), dan SSLCertificateKeyFile (file .key) dan tidak di SSLCertificateChainFile.

Apakah ssl saya masih berfungsi tanpa SSLCertificateChainFilejalur yang ditentukan?

Juga, apakah ada jalur kanonik di mana file-file ini harus ditempatkan?

chrisjlee
sumber
1
Yang paling umum tempat saya melihat orang-orang meletakkan file cert dalam /etc/ssl, /usr/local/etc/sslatau di ssltertentu subdirektori ke situs web (misalnya /home/www/example.com/datatelah website maka home/www/example.com/sslmemiliki sertifikat).
Chris S

Jawaban:

49

Sebenarnya, Anda tidak perlu rantai untuk SSL berfungsi.

Yang selalu Anda butuhkan adalah SSLCertificateFiledengan SSLCertificateKeyFilekunci yang benar untuk sertifikat itu.

Masalahnya adalah, jika semua yang Anda berikan kepada Apache adalah sertifikat, maka yang harus diberikan untuk menghubungkan klien adalah sertifikat - yang tidak menceritakan keseluruhan cerita tentang sertifikat SSL itu. Itu mengatakan, "Saya ditandatangani oleh seseorang, tetapi saya tidak akan memberi tahu Anda tentang mereka".

Ini biasanya berfungsi dengan baik, karena sebagian besar sistem klien memiliki penyimpanan besar sertifikat CA (baik root maupun intermediate) yang dapat diperiksa melalui hubungan penandatanganan yang cocok untuk membangun kepercayaan. Namun, terkadang ini tidak berhasil; paling sering masalah yang akan Anda hadapi adalah klien yang tidak memegang sertifikat untuk CA perantara yang menandatangani sertifikat Anda.

Di situlah rantai masuk; itu memungkinkan Apache menunjukkan kepada klien persisnya seperti apa hubungan kepercayaan itu, yang dapat membantu klien mengisi kekosongan antara sertifikat Anda, root yang mereka percayai, dan perantara yang tidak mereka ketahui. Rantai dapat dimasukkan dalam konfigurasi Anda dalam salah satu dari dua cara:

  • Disematkan dalam file yang sama seperti yang Anda atur untuk Anda SSLCertificateFile, pada baris baru setelah sertifikat server berurutan (root harus di bagian bawah). Jika Anda mengaturnya seperti ini, Anda akan ingin SSLCertificateChainFilemenunjuk ke file yang sama persis SSLCertificateFile.
  • Dalam file terpisah yang dikonfigurasi dalam SSLCertificateChainFilearahan; sertifikat CA yang mengeluarkan sertifikat server harus menjadi yang pertama dalam file, diikuti oleh yang lainnya sampai ke root.

Periksa file sertifikat yang Anda miliki sekarang - Saya yakin tidak ada data berantai yang disertakan. Yang biasanya berfungsi dengan baik, tetapi pada akhirnya akan menyebabkan masalah dengan beberapa browser atau lainnya.

Shane Madden
sumber
2
Saya pikir "biasanya berfungsi dengan baik" tidak benar-benar berlaku lagi untuk sertifikat GoDaddy, jika perantara tidak termasuk. Saya bahkan tidak yakin apakah itu berlaku lagi untuk orang-orang seperti Verisign dan Thawte, sebenarnya, karena mereka telah pindah untuk membuat sertifikat situs lebih jauh dari yang dasar yang disertakan dalam browser. Saya membayangkan itu membuat pencabutan lebih mudah, karena lebih mudah untuk membunuh perantara.
cjc
"Tertanam dalam SSLCertificateFile": Saya berharap ini berhasil, tetapi sepertinya tidak, dan tidak disebutkan dalam dokumen. Rantai Anda harus dimasukkan SSLCertificateChainFile.
Steve Kehlet
@SteveKehlet Anda benar bahwa itu tidak didokumentasikan, tapi saya sudah berhasil di masa lalu - bagaimana Anda memformat file all-in-one?
Shane Madden
1
@SteveKehlet Sebenarnya, Anda benar, saya ingat salah; cara saya mengaturnya untuk satu file adalah memiliki keduanya SSLCertificateFiledan SSLCertificateChainFilemenunjuk ke file gabungan yang sama, yang berfungsi - mengedit jawaban saya untuk memperbaikinya.
Shane Madden
@ShaneMadden Cantik! Berhasil! Terima kasih banyak untuk memikirkannya.
Steve Kehlet
4

Sebenarnya, GoDaddy memberi Anda rantai perantara:

http://support.godaddy.com/help/5238

Inilah beberapa diskusi lagi.

http://support.godaddy.com/help/868/what-is-an-intermediate-certificate

Email dari GoDaddy memberi tahu Anda cara mengunduh sertifikat baru Anda juga akan memiliki informasi tentang file sertifikat perantara. Itu di suatu tempat menuju bagian bawah, mungkin setelah mata Anda berkaca-kaca dari kata-kata dan kenaikan harga.

Dalam hal apa yang akan terjadi jika Anda tidak memasukkan arahan SSLCertificateChainFile yang tepat: Anda akan melihat peringatan merah besar di browser Anda karena situs SSL Anda tidak akan memvalidasi di browser, karena mereka tidak dapat mengikuti rantai sertifikat dari situs Anda. cert ke salah satu yang dimiliki oleh otoritas sertifikat yang diketahui browser.

cjc
sumber
2

Saya ingin menambahkan jawaban baik sebelumnya tentang SSLCertificateChainFile bahwa urutan sertifikat dalam file itu juga penting. Klien berbasis OpenSSL akan memilah pesanan sendiri tetapi klien berbasis gnutl akan gagal pada rantai dengan urutan yang salah.

Tes pemesanan dengan gnutls-cli, seperti

gnutls-cli --x509cafile /etc/ssl/certs/ca-certificates.crt -p https wwwsec.cs.uu.nl

di mana /etc/ssl/certs/ca-certificates.crt adalah lokasi distro Anda menempatkan sertifikat gabungan.

Koos van den Hout
sumber