Artikel ini akan menunjukkan kepada Anda cara mengatur Otoritas Sertifikat dengan OpenSSL. Sertifikat digital adalah dokumen yang digunakan untuk membuktikan kepemilikan kunci publik. Misalnya, sertifikat digital digunakan untuk mengautentikasi situs web yang diakses melalui HTPS. Contoh lain dari penggunaan umum adalah penandatanganan dokumen.
Sertifikat mencakup informasi tentang kunci, identitas pemiliknya, dan tanda tangan digital dari suatu entitas yang telah memverifikasi isinya. Otoritas sertifikat (CA) adalah organisasi yang menerbitkan sertifikat digital.
Artikel ini juga akan menunjukkan cara memberitahu host lain untuk mempercayai sertifikat yang dikeluarkan.
Peringatan :ini seharusnya hanya untuk tujuan pengujian atau bukti konsep. Untuk penggunaan di kehidupan nyata, Anda harus memperoleh sertifikat asli dari otoritas sertifikat yang sebenarnya. Misalnya jika Anda hanya ingin HTTPS dan ingin sertifikat gratis, buka saja https://letsencrypt.org/
Instal OpenSSL
OS utama saya adalah FreeBSD, dan saya suka menggunakan pohon port, untuk menginstalnya jalankan saja:
# cd /usr/ports/security/openssl
# make install clean
Dan tunggu sampai kompilasi dan instalasi port siap. Perhatikan bahwa Anda mungkin sudah memiliki executable openssl (di bawah /usr/bin path) dan jika Anda tetap menginstalnya, biner 'port' akan berada di /usr/local /bin/openssl.
Pertama kali saya berurusan dengan OpenSSL, biner yang disediakan tidak berfungsi untuk saya tetapi portnya berfungsi.
File konfigurasi
Meskipun OS utama saya adalah FreeBSD, mulai sekarang, langkahnya harus sama pada OS apa pun yang mendukung OpenSSL. Mungkin Anda perlu menyesuaikan beberapa jalur, tetapi itu saja.
Anda akan menemukan (sekali lagi, di FreeBSD) sebuah contoh dan file konfigurasi komentar yang baik di /usr/local/openssl/openssl.conf. Ini milik saya setelah beberapa pembersihan, saya telah menyoroti pengaturan yang paling penting:
#OpenSSL Home current directory HOME = /var/openssl #choose any reasonable location #RANDFILE = $ENV::HOME/.rnd # Extra OBJECT IDENTIFIER info: oid_section = new_oids [ new_oids ] tsa_policy1 = 1.2.3.4.1 tsa_policy2 = 1.2.3.4.5.6 tsa_policy3 = 1.2.3.4.5.7 [ ca ] default_ca = YourCA # The default Certificate Authority section [ YourCA ] #most important section of your file dir = /var/openssl/yourCA # Where everything is kept # choose any reasonable location certs = $dir/certs # Where the issued certs are kept crl_dir = $dir/crl # Where the issued crl are kept database = $dir/index.txt # database index file. new_certs_dir = $dir/newcerts # default place for new certs. certificate = $dir/CA/yourCA.crt # The CA certificate serial = $dir/serial # The current serial number #crlnumber = $dir/crlnumber # the current crl number # must be commented out to leave a V1 CRL crl = $dir/CA/yourCA.crl # The current CRL private_key = $dir/CA/yourCA.key # The private key RANDFILE = $dir/private/.rand # private random number file x509_extensions = usr_cert # The extentions to add to the cert # Comment out the following two lines for the "traditional" # (and highly broken) format. name_opt = ca_default # Subject Name options cert_opt = ca_default # Certificate field options default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = default # use public key default MD preserve = no # keep passed DN ordering policy = policy_match # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = supplied organizationName = match organizationalUnitName = optional commonName = supplied emailAddress = optional localityName = supplied # For the 'anything' policy. At this point in time, you must list all # acceptable 'object' types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional ############################################################ [ req ] default_bits = 2048 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes x509_extensions = v3_ca # The extentions to add to the self signed cert string_mask = utf8only [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = AR #I'm on ARgentina countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Salta # i.e. the province I live on localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) 0.organizationName_default = Your company name organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = Section Name. # eg. IT commonName = Common Name (e.g. server FQDN or YOUR name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 64 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 unstructuredName = An optional company name [ usr_cert ] basicConstraints=CA:FALSE nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment [ v3_ca ] # Extensions for a typical CA # PKIX recommendation. subjectKeyIdentifier=hash authorityKeyIdentifier=keyid:always,issuer basicConstraints = CA:true [ crl_ext ] authorityKeyIdentifier=keyid:always [ proxy_cert_ext ] basicConstraints=CA:FALSE nsComment = "OpenSSL Generated Certificate" subjectKeyIdentifier=hash authorityKeyIdentifier=keyid,issuer # This really needs to be in place for it to be a proxy certificate. proxyCertInfo=critical,language:id-ppl-anyLanguage,pathlen:3,policy:foo [ tsa ] default_tsa = tsa_config1 # the default TSA section [ tsa_config1 ] # These are used by the TSA reply generation only. dir = ./demoCA # TSA root directory serial = $dir/tsaserial # The current serial number (mandatory) crypto_device = builtin # OpenSSL engine to use for signing signer_cert = $dir/tsacert.pem # The TSA signing certificate # (optional) certs = $dir/cacert.pem # Certificate chain to include in reply # (optional) signer_key = $dir/private/tsakey.pem # The TSA private key (optional) default_policy = tsa_policy1 # Policy if request did not specify it # (optional) other_policies = tsa_policy2, tsa_policy3 # acceptable policies (optional) digests = md5, sha1 # Acceptable message digests (mandatory) accuracy = secs:1, millisecs:500, microsecs:100 # (optional) clock_precision_digits = 0 # number of digits after dot. (optional) ordering = yes # Is ordering defined for timestamps? # (optional, default: no) tsa_name = yes # Must the TSA name be included in the reply? # (optional, default: no) ess_cert_id_chain = no # Must the ESS cert id chain be included? # (optional, default: no)
Glosarium
Sebelum kita melanjutkan sedikit glosarium singkatan yang digunakan dalam file:
- CA:singkatan dari Otoritas Sertifikat
- CRL:singkatan dari Daftar Pencabutan Sertifikat
- CSR:singkatan dari Permintaan Penandatanganan Sertifikat
- MD:singkatan dari Intisari Pesan
- TSA:singkatan dari Time Stamping Authority
Repositori sertifikat
Selanjutnya, buat direktori dan (untuk saat ini kosong) file untuk menyimpan kunci dan sertifikat kami:
# cd /var/openssl
# mkdir -p yourCA/CA
# mkdir -p yourCA/newcerts
# mkdir -p yourCA/certs/keys
# mkdir -p yourCA/certs/requests
# mkdir -p yourCA/certs/certificates
# cd yourCA
# touch index.txt
# echo 01 > serial
Sertifikat CA
Sekarang Anda dapat membuat sertifikat Otoritas Sertifikat dan menandatanganinya. Tapi pertama-tama, kita perlu membuat kunci pribadi dengan perintah berikut:
# /usr/local/bin/openssl genrsa -out yourCA/CA/yourCA.key 2048
Kedua, buat CSR dengan menjalankan:
# /usr/local/bin/openssl req -new -key ./yourCA/CA/yourCA.key -out yourCA/CA/yourCA.csr
Ikuti petunjuk di layar, perhatikan untuk mengisi informasi yang benar. Terakhir, tanda tangani sendiri sertifikat Anda:
# /usr/local/bin/openssl x509 -req -days 365 \
> -in yourCA/CA/yourCA.csr -out yourCA/CA/yourCA.crt \
> -signkey yourCA/CA/yourCA.key
Dan ini dia:sekarang Anda dapat mulai menandatangani klien dan atau sertifikat web Anda
Sertifikat klien
Prosesnya sangat mirip dengan yang sebelumnya. Tapi kami menggunakan sertifikat CA kami untuk menandatangani sertifikat klien. Dan, idealnya, klien akan membuat kunci pribadinya sendiri dan CSR.
Bagaimanapun, kami hanya menguji hal-hal, jadi saya melakukan setiap langkah dan kemudian mendistribusikan sertifikat yang dihasilkan ke pengguna saya. Perintah berikut dapat dijalankan di mana saja, tetapi hanya untuk menjaga ketertiban, saya menggunakan folder yang dibuat sebelumnya (di bawah /var/openssl/yourCA/certs ). Pengguna kami, John Doe, memerlukan kunci pribadi terlebih dahulu:
# cd /var/openssl/yourCA/certs
# /usr/local/bin/openssl genrsa -des3 -out keys/johndoe.key 2048
Jangan lupa kata sandi yang akan ditanyakan beberapa kali; selanjutnya buat permintaan penandatanganan sertifikat:
# /usr/local/bin/openssl req -new -key keys/johndoe.key -out requests/johndoe.csr
Selanjutnya, tanda tangani sertifikat dengan perintah ini:
# /usr/local/bin/openssl ca -in requests/johndoe.csr -cert ../CA/yourCA.crt -keyfile ../CA/yourCA.key -out certificates/johndoe.crt
Terakhir, ekspor sertifikat ke format PKCS12, Anda akan dimintai kata sandi PK:
# /usr/local/bin/openssl pkcs12 -export -clcerts -in certificates/johndoe.crt -inkey keys/johndoe.key -out certificates/johndoe.p12
Memasang sertifikat
Sekarang Anda dapat memancarkan sertifikat Anda sendiri yang dibutuhkan pengguna untuk menginstalnya agar dapat menggunakannya. Anda perlu mengirimkan dua file:yourCA.crt dan personal johndoe.p12.
Untuk menginstalnya di windows gunakan Alat Manajer Sertifikat. Saya tidak mengunggah beberapa tangkapan layar karena, karena windows saya dalam bahasa Spanyol, saya tidak akan menganggapnya terlalu berguna. Klik start menu lalu jalankan “certmgr.msc”, akan muncul tampilan berikut:
Klik kanan pada folder Root Certification Authority dan pilih "Impor". Mulailah dengan CA.crt Anda dan pilih Otoritas Sertifikasi Akar toko, ikuti wizard.
Sekarang klik kanan pada folder Personal dan ulangi wizard dengan file johndoe.p12. Anda akan dimintai kata sandi. Ketika wizard selesai, Anda dapat melihat sertifikat valid yang diinstal dan detailnya:
Ingat, ini hanya untuk tujuan pembelajaran. Tapi ini juga soal kepercayaan. Jika organisasi Anda cukup kecil dan ada kepercayaan, Anda harus dapat bekerja dengan sertifikat DIY ini.