Mempercayai CA yang tidak dapat dipercaya - Dapatkah saya membatasi bagaimana sistem memercayainya?

32

(Diposting ke ServerFault bukan StackOverflow karena saya merasa ini menyangkut konfigurasi OS lebih dari kode pemrograman).

Saat ini saya bertanggung jawab untuk memelihara sistem yang terhubung ke layanan web pihak ketiga. Layanan web ini memerlukan sertifikat autentikasi klien, yang cukup adil, tetapi layanan web itu sendiri dijamin dengan sertifikat yang ditandatangani sendiri yang dibuat oleh sertifikat otoritas sertifikasi root yang dibuat sendiri - root yang sama yang menciptakan sertifikat autentikasi klien.

Cukup dengan menambahkan sertifikat layanan saat ini ke daftar tepercaya yang diketahui dan mengabaikan sertifikat otoritas yang dibuat sendiri, sayangnya sertifikat layanan berubah secara teratur sehingga sertifikat otoritas harus dipercaya untuk memastikan aplikasi tidak rusak ketika aplikasi sertifikat layanan diperbarui.

Namun saya tidak (secara pribadi) mempercayai sertifikat CA berdasarkan pengalaman saya dengan perusahaan yang menjalankan layanan web - itu tidak akan mengejutkan saya jika itu akan bocor ke web - dan khawatir CA sertifikat tidak memiliki batasan penggunaan kunci ditempatkan pada itu (sementara serangan MITM eksternal adalah suatu kemungkinan, meskipun jauh, saya lebih khawatir tentang sertifikat bocor yang digunakan untuk penandatanganan kode, misalnya).

Apakah mungkin bagi saya untuk memberi tahu komputer saya (saat ini kotak server, tetapi dalam kotak klien desktop biasa di masa depan) untuk mempercayai CA tetapi hanya untuk satu set penggunaan kunci dan sekelompok kecil kemungkinan nama subjek (nama domain) )?

Server saat ini adalah Windows Server 2012 R2, tetapi bisa dijalankan pada kotak Linux - meskipun mesin desktop semuanya kotak Windows.

Dai
sumber
3
Paling tidak di Linux, banyak aplikasi memiliki opsi untuk menentukan lokasi sertifikat rekan CA, sehingga Anda dapat membatasi ruang lingkup CA ini hanya untuk aplikasi yang menggunakannya. Jawaban @CryptoGuy akan bekerja di Linux juga, tidak ada jendela khusus di dalamnya.
Edheldil
1
@Edheldil: Ini implementasi khusus - misalnya Windows telah mendukung batasan nama X.509 lebih lama dari misalnya NSS atau GnuTLS.
grawity
Sistem Anda terhubung ke layanan pihak ketiga ini; dapatkah kode klien pada sistem Anda dikonfigurasikan untuk mempercayai CA layanan itu, sedemikian rupa sehingga hanya dilakukan untuk kode klien itu , bukan untuk seluruh sistem Anda?
Castaglia
@Castaglia Saya dapat menulis kode verifikasi sertifikat saya sendiri yang bekerja secara independen dari sistem host, tetapi ada bagian lain dari perangkat lunak klien yang saya tidak memiliki kendali atas yang menggunakan layanan sertifikat sistemwide.
Dai

Jawaban:

40

Ya itu mungkin. Dalam kasus Windows, ada fitur yang disebut Cross-Certification atau Qualified Subordinasi.

Idenya adalah Anda menandatangani sertifikat CA dari pihak ketiga di lingkungan Anda. Akibatnya sertifikat SSL jarak jauh dirantai ke sertifikat CA root Anda sendiri. Untuk melindungi diri dari kemungkinan sertifikat jahat, Anda menerapkan Name Constraintsekstensi sertifikat tempat Anda menentukan daftar nama yang dapat diterima. Jika CA pihak ketiga mengeluarkan sertifikat untuk nama lain (tidak ditentukan secara eksplisit dalam ekstensi Name Constraints), itu akan secara otomatis ditolak oleh penyedia CryptoAPI Anda.

Selain batasan nama, Anda dapat menjelaskan batasan Penggunaan Kunci yang Ditingkatkan dengan menentukan Application Policiesekstensi sertifikat dalam sertifikat silang. Jadi, penyedia kepercayaan Anda akan berhasil memvalidasi hanya penggunaan yang ditentukan dalam Application Policiesekstensi.

Informasi lebih lanjut: Merencanakan dan Menerapkan Sertifikasi Silang dan Subordinasi Berkualitas dengan Menggunakan Windows Server 2003

ps meskipun, artikel ini ditulis terhadap Windows Server 2003, artikel tersebut masih berlaku untuk versi Windows Server terbaru.

Crypt32
sumber