Selama pencarian saya, saya menemukan beberapa cara menandatangani Permintaan Penandatanganan Sertifikat SSL:
Menggunakan
x509
modul:openssl x509 -req -days 360 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -out server.crt
Menggunakan
ca
modul:openssl ca -cert ca.crt -keyfile ca.key -in server.csr -out server.crt
Catatan: Saya tidak yakin tentang penggunaan parameter yang tepat untuk ini. Mohon saran penggunaan yang benar jika saya menggunakannya.
Cara apa yang harus digunakan seseorang untuk menandatangani permintaan sertifikat dengan Otoritas Sertifikasi Anda? Apakah satu metode lebih baik dari yang lain (misalnya, satu tidak digunakan lagi)?
ca
adalah untuk kasus-kasus ketika Anda lebih serius menjadi seorang CA.Jawaban:
Anda melewatkan pengantar untuk perintah-perintah itu.
Ini adalah proses dua langkah. Pertama, Anda mengatur CA Anda, dan kemudian Anda menandatangani sertifikat entitas akhir (alias server atau pengguna). Kedua perintah ini menghilangkan dua langkah menjadi satu. Dan keduanya menganggap Anda memiliki file konfigurasi OpenSSL yang sudah disiapkan untuk CA dan sertifikat Server (entitas akhir).
Pertama, buat file konfigurasi dasar :
Kemudian, tambahkan yang berikut ini:
Kolom di atas diambil dari yang lebih kompleks
openssl.cnf
(Anda dapat menemukannya di/usr/lib/openssl.cnf
), tetapi saya pikir itu adalah hal yang penting untuk membuat sertifikat CA dan kunci pribadi.Tweak bidang di atas sesuai dengan selera Anda. Defaultnya menghemat waktu Anda dari memasukkan informasi yang sama saat bereksperimen dengan file konfigurasi dan opsi perintah.
Saya menghilangkan hal-hal yang relevan dengan CRL, tetapi operasi CA Anda harus memilikinya. Lihat
openssl.cnf
dan bagian terkaitcrl_ext
.Kemudian, jalankan yang berikut ini. The
-nodes
menghilangkan password atau passphrase sehingga Anda dapat memeriksa sertifikat. Merupakan ide yang sangat buruk untuk menghilangkan kata sandi atau frasa sandi.Setelah perintah dijalankan,
cacert.pem
akan menjadi sertifikat Anda untuk operasi CA, dancakey.pem
akan menjadi kunci pribadi. Ingat kunci pribadi tidak memiliki kata sandi atau frasa sandi.Anda dapat membuang sertifikat dengan yang berikut ini.
Dan uji tujuannya dengan yang berikut (jangan khawatir tentang
Any Purpose: Yes
; lihat "critical, CA: FALSE" tetapi "Any Purpose CA: Yes" ).Untuk bagian dua, saya akan membuat file konfigurasi lain yang mudah dicerna. Pertama,
touch
yangopenssl-server.cnf
(Anda dapat membuat salah satu dari ini untuk sertifikat pengguna juga).Kemudian buka, dan tambahkan yang berikut ini.
Jika Anda sedang mengembangkan dan perlu menggunakan workstation Anda sebagai server, maka Anda mungkin perlu melakukan yang berikut untuk Chrome. Kalau tidak, Chrome dapat mengeluh Nama Biasa tidak valid (
ERR_CERT_COMMON_NAME_INVALID
) . Saya tidak yakin apa hubungan antara alamat IP di SAN dan CN dalam hal ini.Kemudian, buat permintaan sertifikat server. Pastikan untuk menghilangkan
-x509
*. Menambahkan-x509
akan membuat sertifikat, dan bukan permintaan.Setelah perintah ini dijalankan, Anda akan memiliki permintaan
servercert.csr
dan kunci pribadiserverkey.pem
.Dan Anda bisa memeriksanya lagi.
Selanjutnya, Anda harus menandatanganinya dengan CA Anda.
Anda hampir siap untuk menandatangani sertifikat server oleh CA Anda. CA
openssl-ca.cnf
membutuhkan dua bagian lagi sebelum mengeluarkan perintah.Pertama, buka
openssl-ca.cnf
dan tambahkan dua bagian berikut.Kedua, tambahkan berikut ini ke
[ CA_default ]
bagianopenssl-ca.cnf
. Saya meninggalkan mereka sebelumnya, karena mereka dapat memperumit masalah (mereka tidak digunakan pada saat itu). Sekarang Anda akan melihat bagaimana mereka digunakan, jadi semoga mereka masuk akal.Ketiga, sentuh
index.txt
danserial.txt
:Kemudian, lakukan hal berikut:
Anda harus melihat yang serupa dengan yang berikut ini:
Setelah perintah dijalankan, Anda akan memiliki sertifikat server yang baru dicetak
servercert.pem
. Kunci pribadi dibuat sebelumnya dan tersedia diserverkey.pem
.Akhirnya, Anda dapat memeriksa sertifikat yang baru dicetak dengan yang berikut:
Sebelumnya, Anda menambahkan berikut ke
CA_default
:copy_extensions = copy
. Ekstensi salinan ini disediakan oleh orang yang mengajukan permintaan.Jika Anda menghilangkan
copy_extensions = copy
, maka sertifikat server Anda tidak memiliki Nama Alternatif Subjek (SAN) sepertiwww.example.com
danmail.example.com
.Jika Anda menggunakan
copy_extensions = copy
, tetapi jangan melihat permintaan, maka pemohon mungkin bisa menipu Anda untuk menandatangani sesuatu seperti root bawahan (bukan server atau sertifikat pengguna). Yang berarti dia akan dapat mencetak sertifikat yang rantai kembali ke akar tepercaya Anda. Pastikan untuk memverifikasi permintaan denganopenssl req -verify
sebelum menandatangani.Jika Anda menghilangkan
unique_subject
atau mengaturnyayes
, maka Anda hanya akan diizinkan untuk membuat satu sertifikat dengan nama subjek yang dibedakan.Mencoba membuat sertifikat kedua saat bereksperimen akan menghasilkan yang berikut saat menandatangani sertifikat server Anda dengan kunci pribadi CA:
Jadi
unique_subject = no
sangat cocok untuk pengujian.Jika Anda ingin memastikan Nama Organisasi konsisten antara CA yang ditandatangani sendiri, CA bawahan dan sertifikat Entitas Akhir , kemudian tambahkan yang berikut ke file konfigurasi CA Anda:
Jika Anda ingin mengizinkan Nama Organisasi berubah, gunakan:
Ada aturan lain tentang penanganan nama DNS di sertifikat X.509 / PKIX. Lihat dokumen ini untuk aturan:
RFC 6797 dan RFC 7469 terdaftar, karena lebih membatasi daripada RFC lain dan dokumen CA / B. RFC's 6797 dan 7469 juga tidak mengizinkan alamat IP.
sumber
openssl req
digunakan untuk menghasilkan CSR,openssl req -x509
digunakan untuk menghasilkan sertifikat CA (saya melihat di beberapa tempat Anda juga dapat membuat sertifikat yang ditandatangani sendiri),openssl ca
digunakan untuk menandatangani CSR dengan sertifikat CA. Baik? Yang membingungkan saya juga adalah bahwa bagian yang sama dari file openssl.cnf digunakan dengan nilai yang berbeda tergantung pada perintah ... Saya pikir saya benar-benar hilang sekarang.openssl req -x509
digunakan untuk membuat CA. Kedua,openssl req
digunakan untuk membuat CSR server. Ketiga,openssl ca
digunakan untuk membuat sertifikat server dan mengesahkannya dengan tanda tangan CA.openssl-ca.cnf
danopenssl-server.cnf
. Setelah Anda terbiasa dengan mereka dan bagaimana bagian-bagian itu dipanggil, Anda dapat menggabungkannya menjadi seperti monsteropenssl.cnf
.Selain menjawab @jww, saya ingin mengatakan bahwa konfigurasi di openssl-ca.cnf,
mendefinisikan jumlah hari standar sertifikat yang ditandatangani oleh root-ca ini akan valid. Untuk mengatur validitas root-ca itu sendiri, Anda harus menggunakan opsi '-days n' di:
Gagal melakukannya, root-ca Anda hanya akan berlaku untuk standar satu bulan dan sertifikat apa pun yang ditandatangani oleh root ini CA juga akan memiliki validitas satu bulan.
sumber