GNU/Linux >> Belajar Linux >  >> Linux

6 opsi perintah OpenSSL yang harus diketahui oleh setiap sysadmin

Transport layer security (TLS) adalah bagian penting dari strategi keamanan apa pun, dan aplikasi di luar server web semakin memanfaatkan perlindungan yang ditawarkan oleh kriptografi kunci publik. Toolkit OpenSSL adalah utilitas dasar yang harus diketahui oleh administrator sistem mana pun jika mereka bertanggung jawab untuk memelihara aplikasi yang dilindungi TLS. Dalam artikel ini, saya menunjukkan beberapa perintah paling umum yang saya gunakan setiap hari. Meskipun banyak artikel berfokus pada pembuatan permintaan penandatanganan sertifikat (CSR) atau sertifikat yang ditandatangani sendiri, artikel ini akan meluangkan waktu untuk meninjau perintah OpenSSL dan satu baris di luar proses pembuatan sertifikat.

[ Anda mungkin juga menikmati: Menyediakan sertifikat CA untuk alat baris perintah Linux ]

Memeriksa validitas sertifikat

Salah satu langkah pemecahan masalah paling umum yang akan Anda lakukan adalah memeriksa validitas dasar dari rantai sertifikat yang dikirim oleh server, yang dapat dilakukan dengan openssl s_client memerintah. Contoh di bawah ini menunjukkan rantai sertifikat yang berhasil diverifikasi yang dikirim oleh server (redhat.com) setelah koneksi pada port 443. -brief flag mengecualikan beberapa keluaran yang lebih bertele-tele yang biasanya ditampilkan oleh OpenSSL. Perhatikan bahwa "Verifikasi" dihasilkan sebagai "Oke".

Secara default, openssl s_client akan membaca dari input standar untuk data yang akan dikirim ke server jauh. Menambahkan echo ke one-liner mengirim baris baru dan segera mengakhiri koneksi. Tanpa ini, Anda perlu menekan Ctrl+C untuk keluar dari koneksi.

$ echo | openssl s_client -connect redhat.com:443 -brief
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256
Peer certificate: C = US, ST = North Carolina, L = Raleigh, O = "Red Hat, Inc.", OU = Information Technology, CN = *.redhat.com
Hash used: SHA256
Signature type: RSA
Verification: OK
Supported Elliptic Curve Point Formats: uncompressed
Server Temp Key: ECDH, P-256, 256 bits
DONE

Bandingkan output di atas dengan contoh di bawah ini. Dalam keluaran ini, Anda dapat dengan jelas melihat bahwa verifikasi gagal dengan kesalahan:“sertifikat yang ditandatangani sendiri.”

$ echo | openssl s_client -connect self-signed.badssl.com:443 -brief
depth=0 C = US, ST = California, L = San Francisco, O = BadSSL, CN = *.badssl.com
verify error:num=18:self signed certificate
CONNECTION ESTABLISHED
Protocol version: TLSv1.2
Ciphersuite: ECDHE-RSA-AES128-GCM-SHA256
Peer certificate: C = US, ST = California, L = San Francisco, O = BadSSL, CN = *.badssl.com
Hash used: SHA512
Signature type: RSA
Verification error: self signed certificate
Supported Elliptic Curve Point Formats: uncompressed:ansiX962_compressed_prime:ansiX962_compressed_char2
Server Temp Key: ECDH, P-256, 256 bits
DONE

Menentukan kapan sertifikat kedaluwarsa

Setiap sysadmin telah mengalami rasa malu yang mengikuti dari membiarkan sertifikat untuk situs web yang menghadap publik kedaluwarsa. Ada banyak alat pemantauan untuk mengawasi hal ini dan memastikan bahwa itu tidak terjadi pada Anda, tetapi bagaimana jika Anda hanya ingin cepat memeriksa tanggal kedaluwarsa sertifikat dari baris perintah? OpenSSL telah membantu Anda.

Memeriksa tanggal kedaluwarsa sertifikat melibatkan satu baris yang terdiri dari dua perintah OpenSSL:s_client dan x509 . Anda sudah melihat bagaimana s_client membuat koneksi ke server dalam contoh sebelumnya. Dengan menyalurkan output ke x509 , Anda dapat memperoleh masa berlaku sertifikat dengan menggunakan -dates bendera. Di bawah ini adalah contoh untuk sertifikat yang valid dan yang kedaluwarsa.

# A valid certificate that hasn’t expired yet
$ echo | openssl s_client -connect redhat.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Jul  9 00:00:00 2019 GMT
notAfter=Aug  2 12:00:00 2021 GMT

# A certificate that expired in 2015
$ echo | openssl s_client -connect expired.badssl.com:443 2>/dev/null | openssl x509 -noout -dates
notBefore=Apr  9 00:00:00 2015 GMT
notAfter=Apr 12 23:59:59 2015 GMT

Catatan :Jika Anda menerima sertifikat SSL default sebagai pengganti sertifikat server, lihat penjelasan SNI (Indikasi Nama Server) ini.

Memeriksa ekstensi sertifikat

Ekstensi X509 memungkinkan bidang tambahan ditambahkan ke sertifikat. Salah satu yang paling umum adalah nama alternatif subjek (SAN). SAN sertifikat memungkinkan beberapa nilai (misalnya, beberapa FQDN) untuk dikaitkan dengan satu sertifikat. SAN bahkan digunakan saat tidak ada banyak nilai karena penggunaan nama umum sertifikat untuk verifikasi tidak digunakan lagi.

Mirip dengan one-liner sebelumnya, output perpipaan antara beberapa perintah OpenSSL memudahkan untuk memeriksa ekstensi sertifikat tertentu dan memungkinkan Anda untuk melihat SAN yang terkait dengan sertifikat:

$  echo | openssl s_client -connect redhat.com:443 2>/dev/null | openssl x509 -noout -ext subjectAltName
X509v3 Subject Alternative Name:
    DNS:*.redhat.com, DNS:redhat.com

Kumpulan ekstensi umum lainnya termasuk batasan dasar dan penggunaan kunci sertifikat. Secara khusus, Anda mungkin ingin memeriksa apakah sertifikat diizinkan untuk digunakan sebagai otoritas sertifikat. Sekali lagi, ini dapat dilakukan dengan cara yang sama seperti Anda memeriksa SAN:

$  openssl x509 -ext basicConstraints,keyUsage -noout -in /usr/share/ca-certificates/mozilla/VeriSign_Universal_Root_Certification_Authority.crt
X509v3 Basic Constraints: critical
    CA:TRUE
X509v3 Key Usage: critical
    Certificate Sign, CRL Sign

Memeriksa cipher atau versi TLS yang tidak digunakan lagi

Alat berbasis web yang sangat baik, seperti Qualys SSL Lab, hadir untuk memberi Anda laporan lengkap tentang keamanan konfigurasi TLS Anda. Ini termasuk memperingatkan Anda tentang penggunaan rangkaian sandi yang tidak aman dan parameter konfigurasi lainnya yang dapat melemahkan postur keamanan sumber daya yang dilindungi TLS. Namun, Anda mungkin hanya ingin menjalankan tes cepat dari baris perintah, dan OpenSSL membuatnya mudah.

Pertama, Anda dapat membuat daftar cipher yang didukung untuk versi SSL/TLS tertentu menggunakan openssl ciphers memerintah. Di bawah ini, Anda dapat melihat bahwa saya telah mencantumkan cipher yang didukung untuk TLS 1.3. -s flag memberitahu perintah cipher untuk hanya mencetak cipher yang didukung oleh versi TLS yang ditentukan (-tls1_3 ):

$ openssl ciphers -s -tls1_3
TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256

s_client perintah kemudian dapat digunakan untuk menguji versi TLS dan rangkaian sandi yang berbeda. Situs web Ciphersuites.info adalah gudang informasi yang berguna tentang kekuatan berbagai suite sandi. Sebagai contoh, mencoba menggunakan rangkaian TLS_PSK_WITH_AES_128_CBC_SHA yang lemah terhadap server yang tidak mendukungnya akan mengakibatkan kesalahan:

openssl s_client -connect redhat.com:443 -cipher PSK-AES128-CBC-SHA -quiet -no_tls1_3
139963477378368:error:141A90B5:SSL routines:ssl_cipher_list_to_bytes:no ciphers available:../ssl/statem/statem_clnt.c:3794:No ciphers enabled for max supported SSL/TLS version

Demikian pula, Anda dapat menentukan versi protokol TLS yang digunakan dalam koneksi. Contoh di bawah ini menunjukkan bahwa TLS 1.1 tidak didukung oleh server. Pastikan untuk meninjau halaman manual untuk melihat daftar lengkap opsi.

$ openssl s_client -connect redhat.com:443 -tls1_1 -quiet
139890998576448:error:141E70BF:SSL routines:tls_construct_client_hello:no protocols available:../ssl/statem/statem_clnt.c:1112:

Memeriksa sertifikat

Saya telah membahas bagian tertentu dari sertifikat, seperti tanggal validitas atau ekstensi X509. Terkadang, Anda hanya ingin melihat segala sesuatu tentang sertifikat tertentu. Utilitas X509 dapat digunakan dengan -noout (untuk menekan pencetakan sertifikat yang disandikan), -text (untuk mencetak informasi teks tentang sertifikat), dan -in (untuk menentukan file input) bendera untuk mencetak semua yang ingin Anda ketahui tentang sertifikat tertentu. Contoh di bawah ini menggunakan file sertifikat pada sistem lokal saya, tetapi Anda dapat dengan mudah menyalurkan output dari openssl s_client , seperti yang terlihat pada contoh sebelumnya.

$ openssl x509 -text -noout -in /usr/share/ca-certificates/mozilla/VeriSign_Universal_Root_Certification_Authority.crt
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            40:1a:c4:64:21:b3:13:21:03:0e:bb:e4:12:1a:c5:1d
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2008 VeriSign, Inc. - For authorized use only", CN = VeriSign Universal Root Certification Authority
        Validity
            Not Before: Apr  2 00:00:00 2008 GMT
            Not After : Dec  1 23:59:59 2037 GMT
        Subject: C = US, O = "VeriSign, Inc.", OU = VeriSign Trust Network, OU = "(c) 2008 VeriSign, Inc. - For authorized use only", CN = VeriSign Universal Root Certification Authority
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:c7:61:37:5e:b1:01:34:db:62:d7:15:9b:ff:58:
                    5a:8c:23:23:d6:60:8e:91:d7:90:98:83:7a:e6:58:
                    19:38:8c:c5:f6:e5:64:85:b4:a2:71:fb:ed:bd:b9:
                    da:cd:4d:00:b4:c8:2d:73:a5:c7:69:71:95:1f:39:
                    3c:b2:44:07:9c:e8:0e:fa:4d:4a:c4:21:df:29:61:
                    8f:32:22:61:82:c5:87:1f:6e:8c:7c:5f:16:20:51:
                    44:d1:70:4f:57:ea:e3:1c:e3:cc:79:ee:58:d8:0e:
                    c2:b3:45:93:c0:2c:e7:9a:17:2b:7b:00:37:7a:41:
                    33:78:e1:33:e2:f3:10:1a:7f:87:2c:be:f6:f5:f7:
                    42:e2:e5:bf:87:62:89:5f:00:4b:df:c5:dd:e4:75:
                    44:32:41:3a:1e:71:6e:69:cb:0b:75:46:08:d1:ca:
                    d2:2b:95:d0:cf:fb:b9:40:6b:64:8c:57:4d:fc:13:
                    11:79:84:ed:5e:54:f6:34:9f:08:01:f3:10:25:06:
                    17:4a:da:f1:1d:7a:66:6b:98:60:66:a4:d9:ef:d2:
                    2e:82:f1:f0:ef:09:ea:44:c9:15:6a:e2:03:6e:33:
                    d3:ac:9f:55:00:c7:f6:08:6a:94:b9:5f:dc:e0:33:
                    f1:84:60:f9:5b:27:11:b4:fc:16:f2:bb:56:6a:80:
                    25:8d
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            1.3.6.1.5.5.7.1.12: 
                0_.].[0Y0W0U..image/gif0!0.0...+..............k...j.H.,{..0%.#http://logo.verisign.com/vslogo.gif
            X509v3 Subject Key Identifier: 
                B6:77:FA:69:48:47:9F:53:12:D5:C2:EA:07:32:76:07:D1:97:07:19
    Signature Algorithm: sha256WithRSAEncryption
         4a:f8:f8:b0:03:e6:2c:67:7b:e4:94:77:63:cc:6e:4c:f9:7d:
         0e:0d:dc:c8:b9:35:b9:70:4f:63:fa:24:fa:6c:83:8c:47:9d:
         3b:63:f3:9a:f9:76:32:95:91:b1:77:bc:ac:9a:be:b1:e4:31:
         21:c6:81:95:56:5a:0e:b1:c2:d4:b1:a6:59:ac:f1:63:cb:b8:
         4c:1d:59:90:4a:ef:90:16:28:1f:5a:ae:10:fb:81:50:38:0c:
         6c:cc:f1:3d:c3:f5:63:e3:b3:e3:21:c9:24:39:e9:fd:15:66:
         46:f4:1b:11:d0:4d:73:a3:7d:46:f9:3d:ed:a8:5f:62:d4:f1:
         3f:f8:e0:74:57:2b:18:9d:81:b4:c4:28:da:94:97:a5:70:eb:
         ac:1d:be:07:11:f0:d5:db:dd:e5:8c:f0:d5:32:b0:83:e6:57:
         e2:8f:bf:be:a1:aa:bf:3d:1d:b5:d4:38:ea:d7:b0:5c:3a:4f:
         6a:3f:8f:c0:66:6c:63:aa:e9:d9:a4:16:f4:81:d1:95:14:0e:
         7d:cd:95:34:d9:d2:8f:70:73:81:7b:9c:7e:bd:98:61:d8:45:
         87:98:90:c5:eb:86:30:c6:35:bf:f0:ff:c3:55:88:83:4b:ef:
         05:92:06:71:f2:b8:98:93:b7:ec:cd:82:61:f1:38:e6:4f:97:
         98:2a:5a:8d

Menghasilkan beberapa data acak

Pada titik ini, Anda merasa nyaman dengan menghubungkan ke server dan memeriksa sertifikat. Saya akan mengakhiri dengan satu trik terakhir yang sering berguna bagi saya. openssl rand perintah dapat digunakan untuk menghasilkan byte pseudo-acak. -base64 flag akan base64 mengkodekan output, memberi Anda string acak yang dapat digunakan sebagai kata sandi atau untuk aplikasi lain yang memerlukan string acak. Pastikan saja jumlah byte habis dibagi tiga untuk menghindari padding.

$  openssl rand -base64 9
Emo+xQINmYoU

[ Dapatkan buku gratis ini dari Red Hat dan O'Reilly - Operator Kubernetes:Mengotomatiskan Platform Orkestrasi Kontainer. ] 

Menutup

Dalam artikel ini, Anda mempelajari beberapa perintah OpenSSL dasar yang dapat membuat kehidupan sehari-hari Anda sebagai administrator sistem menjadi lebih mudah. OpenSSL adalah seperangkat alat (dan perpustakaan perangkat lunak) yang sangat kuat, dan artikel ini hanya menyentuh permukaan fungsinya. Namun, perintah ini merupakan titik awal yang baik untuk mengembangkan pengetahuan OpenSSL lebih lanjut dan seperangkat alat yang berguna untuk dimiliki di kotak alat sysadmin mana pun yang secara teratur bekerja dengan server yang dilindungi TLS.


Linux
  1. 10 perintah yang harus diketahui setiap pengguna Linux

  2. 3 Hacks Berguna yang Harus Diketahui Setiap Pengguna Linux

  3. Daftar Perintah Linux yang Harus Diketahui Setiap Pengembang

  1. Tema suara di Linux:Apa yang harus diketahui setiap pengguna

  2. 15 Contoh Ekspansi Sejarah Bash Linux Yang Harus Anda Ketahui

  3. Pintasan Terminal Linux yang Berguna Yang Harus Diketahui Setiap Pengguna Power Linux

  1. Membedah perintah gratis:Apa yang perlu diketahui oleh sysadmin Linux

  2. 3 keterampilan yang harus dibawa oleh setiap sysadmin Linux ke meja

  3. 7 perintah jaringan Linux yang harus diketahui oleh setiap sysadmin