Saya mengkonfigurasi CA pertama saya. Tujuannya adalah untuk mengeluarkan sertifikat untuk klien kami, yang akan menggunakannya untuk mengakses layanan EDI kami melalui https. Jadi saya perlu membuat sertifikat klien ssl. Seluruh proses penandatanganan sertifikat berfungsi sekarang, dan sertifikat dapat berhasil digunakan untuk mengakses layanan kami, tetapi saya khawatir tentang satu hal:
Tujuan sertifikat yang dihasilkan adalah cara umum:
$ openssl x509 -purpose -noout -in client.crt.pem
Certificate purposes:
SSL client : Yes
SSL client CA : No
SSL server : Yes
SSL server CA : No
Netscape SSL server : Yes
Netscape SSL server CA : No
S/MIME signing : Yes
S/MIME signing CA : No
S/MIME encryption : Yes
S/MIME encryption CA : No
CRL signing : Yes
CRL signing CA : No
Any Purpose : Yes
Any Purpose CA : Yes
OCSP helper : Yes
OCSP helper CA : No
Saya merasa bahwa seharusnya tidak ada tujuan lain selain klien SSL dan S / MIME yang menandatangani kasus saya. Apakah saya salah dan ini harus tetap seperti itu?
Jika saya benar dan saya harus menonaktifkan tujuan lain, apa yang harus saya masukkan dalam konfigurasi openssl.cnf saya?
Ini konfigurasi saya saat ini (sedikit dilucuti):
[ CA_edi ]
# here was directory setup and some other stuff, cut it for clarity
x509_extensions = usr_cert # The extentions to add to the cert
name_opt = ca_default # Subject Name options
cert_opt = ca_default # Certificate field options
# Extension copying option: use with caution.
# copy_extensions = copy
# stripped rest of config about validity days and such
[ usr_cert ]
basicConstraints=CA:FALSE
nsCertType = client, email
keyUsage = nonRepudiation, digitalSignature, keyEncipherment, keyAgreement
Apa yang saya lakukan salah bahwa sertifikat yang dihasilkan memungkinkan untuk penggunaan server?
openssl x509 -text -nameopt multiline -certopt no_sigdump -certopt no_pubkey -noout -in one_of_your_client_certificates.pem
dan bagian ekstensi dariopenssl.cnf
file Anda , saya akan melihat apakah saya dapat memberikan saran yang lebih spesifik.Jawaban:
Anda berhak untuk prihatin tentang "penandatanganan CRL", "CA Tujuan Apa Pun", dan "Pembantu OCSP", ini biasanya dicadangkan untuk sertifikat CA atau sertifikat yang secara khusus dikeluarkan untuk menandatangani daftar pencabutan sertifikat penandatanganan (CRL, daftar sertifikat yang tidak valid), atau menjalankan server OCSP (mirip dengan CRL, tetapi layanan online yang memberikan status validitas untuk sertifikat).
Halaman dokumentasi OpenSSL yang relevan adalah untuk perintah x509 dan x509v3_config
Berikut konfigurasi OpenSSL yang saya gunakan untuk membuat sertifikat klien:
Saya akan membawa Anda melewatinya baris demi baris:
The
basicConstraints
ditetapkan sebagai kritis, yang berarti "menolak sertifikat ini jika Anda tidak mengerti ini sedikit", dan menentukan bahwa sertifikat tersebut tidak CA sebuah . Bahkan jika seseorang menggunakan perangkat lunak untuk mengeluarkan sertifikat dari sertifikat ini, itu tidak akan pernah dipercaya.Penggunaan kunci yang diperluas tidak penting, tetapi beberapa perangkat lunak mengharuskannya hadir dan memiliki tujuan tertentu. Ini mencantumkan otentikasi klien (apa yang Anda bicarakan) dan juga penandatanganan & enkripsi email S / MIME; Anda dapat dengan aman menghapus tujuan S / MIME jika Anda tidak membutuhkannya.
subjectAltName
memungkinkan Anda untuk memasukkan informasi tentang subjek yang tidak dapat Anda sertakan dalamsubject
bidang. Ini juga digunakan dalam sertifikat server web untuk menyertakan nama domain yang dapat digunakan untuk sertifikat selain domain yang ditentukan dalam atribut nama umum subjek; sertifikat-sertifikat ini disebut sebagai sertifikat SAN (nama alternatif subjek). Ini adalah praktik umum untuk memasukkan alamat email dalamsubjectAltName
daripada pada subjek; Anda tidak harus memasukkan alamat email sama sekali, dan dapat menghilangkan ekstensi.crlDistributionPoints
daftar tempat-tempat yang tersedia CRL untuk otoritas penerbit; ia memberi tahu perangkat lunak yang mencoba memvalidasi sertifikat "di sinilah tempat untuk melihat apakah sertifikat ini masih valid." Untuk penggunaan Internet,http://
URL mungkin yang terbaik (CRL ditandatangani secara digital, jadi tidak perluhttps
, dan itu dapat menyebabkan masalah trust loop).authorityKeyIdentifier
biasanya hash SHA-1 dari kunci publik CA yang mengeluarkan (meskipun mungkin nilai-nilai lain). Jika Anda menyertakan ekstensi ini, nilainya harus cocok dengan nilaisubjectKeyIdentifier
dalam sertifikat CA yang menerbitkan .authorityInfoAccess
agak miripcrlDistributionPoints
tetapi itu menentukan di mana untuk mendapatkan sertifikat CA mengeluarkan daripada CRL. Ini berguna jika Anda memiliki rantai kepercayaan yang panjang: misalnya CA-1 mengeluarkan CA-2, yang menerbitkan CA-3, yang menerbitkan sertifikat; perangkat lunak yang mencoba memverifikasi sertifikat dapat menggunakan ekstensi ini untuk mendapatkan sertifikat CA-3, kemudian menggunakan nilai dalam sertifikat itu untuk mendapatkan sertifikat CA-2, dll. Biasanya, rantai sertifikat (dalam hal ini, sertifikat CA-2 dan sertifikat CA-3) dibundel di samping sertifikat subjek (misalnya dalam transaksi SSL, atau email S / MIME). Saya tidak tahu ada perangkat lunak yang menggunakan ekstensi ini, tetapi saya juga tidak tahu bahwa itu tidak umum digunakan. Ini biasanya termasuk dalam sertifikat.Dari semua itu, Anda hanya benar-benar membutuhkan yang
basicConstraints
danextendedKeyUsage
; kendala dasar benar-benar harus benar - benar kritis (atau Anda baru saja membagikan sertifikat CA!), dan penggunaan kunci yang diperluas umumnya tidak.sumber