Cara mengatur dengan benar openssl CA untuk menghasilkan sertifikat klien ssl

9

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?

Berputar
sumber
Tinjau "cert_opt = ca_default" yang tampaknya membuat override.
zedman9991
Ini sepertinya pertanyaan yang bagus, bertahun-tahun kemudian dan tidak ada jawaban?
Evan Carroll
Ya, tidak ada jawaban. Saya belum menemukan jawabannya sendiri. Tetapi uji beta EDI kami sedang dalam proses dan saya harus menyelesaikannya dalam waktu dekat untuk versi produksi.
SWilk
Saya telah mengambil jawaban terbaik dari jawaban di bawah, tetapi jika Anda dapat menyertakan salinan output dari openssl x509 -text -nameopt multiline -certopt no_sigdump -certopt no_pubkey -noout -in one_of_your_client_certificates.pemdan bagian ekstensi dari openssl.cnffile Anda , saya akan melihat apakah saya dapat memberikan saran yang lebih spesifik.
Calrion

Jawaban:

4

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:

[user]
basicConstraints = critical,CA:FALSE
extendedKeyUsage = clientAuth,emailProtection
subjectAltName=email:copy
crlDistributionPoints = URI:http://www.rgweb.org/ca/rgweb-ca.crl
authorityKeyIdentifier=keyid:always
authorityInfoAccess = caIssuers;URI:http://www.rgweb.org/ca/rgweb-ca.cer

Saya akan membawa Anda melewatinya baris demi baris:

The basicConstraintsditetapkan 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.

subjectAltNamememungkinkan Anda untuk memasukkan informasi tentang subjek yang tidak dapat Anda sertakan dalam subjectbidang. 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 dalam subjectAltNamedaripada pada subjek; Anda tidak harus memasukkan alamat email sama sekali, dan dapat menghilangkan ekstensi.

crlDistributionPointsdaftar 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 perlu https, dan itu dapat menyebabkan masalah trust loop).

authorityKeyIdentifierbiasanya hash SHA-1 dari kunci publik CA yang mengeluarkan (meskipun mungkin nilai-nilai lain). Jika Anda menyertakan ekstensi ini, nilainya harus cocok dengan nilai subjectKeyIdentifierdalam sertifikat CA yang menerbitkan .

authorityInfoAccessagak mirip crlDistributionPointstetapi 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 basicConstraintsdan extendedKeyUsage; kendala dasar benar-benar harus benar - benar kritis (atau Anda baru saja membagikan sertifikat CA!), dan penggunaan kunci yang diperluas umumnya tidak.

Calrion
sumber
Terima kasih atas jawaban Anda. Saya sudah kehilangan harapan. Saya akan membacanya nanti hari ini dan kembali kepada Anda sesegera mungkin.
SWilk