Root dan sertifikat perantara dari Otoritas Sertifikasi resmi Rusia

Seperti banyak negara lain, Rusia menggunakan sertifikat x509 yang dikeluarkan oleh Otoritas Sertifikasi Rusia (UC) resmi untuk manajemen dokumen elektronik resmi. Dan tidak seperti banyak negara lain, ia menggunakan sandi sendiri.

Untuk waktu yang lama saya ingin mengotomatiskan verifikasi tanda tangan dari jawaban otoritas (saya banyak berkorespondensi) dan verifikasi "pembongkaran" Roskomnadzor untuk keaslian (berdasarkan sifat aktivitas publik). Masalah terbesar adalah mendapatkan sertifikat perantara dari rantai tersebut. Karena ada file Excel root CA yang tidak jelas di situs web Departemen Komunikasi dan itu saja. Dan yang menengah harus dicari di situs CA masing-masing. Hidup itu menyakitkan.
Apa itu "sertifikat menengah" . Biarkan saya mengingatkan Anda bagaimana cara kerjanya. Misalkan kita ingin memeriksa beberapa surat yang ditandatangani. Surat itu ditandatangani dengan kunci. Ada sertifikat yang mengesahkan kunci ini. Sertifikat dikeluarkan oleh seseorang dan juga ditandatangani oleh beberapa kunci dengan sertifikat terlampir. Dan sertifikat itu persis sama. Demikian seterusnya hingga saat sertifikat dikeluarkan untuk dirinya sendiri. Saat memeriksa, kami telah (membawa, dikirim dari paket, kami diberi flash drive) satu set sertifikat akhir ini, yang kami yakini. Kami percaya karena kami percaya orang yang memberi mereka kepada kami. Di dunia web, kami mempercayai browser dan kumpulan sertifikat rootnya. Di dunia web, saat terhubung melalui HTTPS, sertifikat perantara juga ditransfer dari server ke klien. Karenanya, di dunia web, kami selalu memiliki seluruh rantai.
Tiba-tiba (saya tidak tahu persis kapan) dan tanpa terasa di situs web Layanan Negara, muncul tautan seperti itu:
e-trust.gosuslugi.ru/CA

Saya buru-buru menulis sebuah program yang mengubah file XML dengan daftar CA dan sertifikat dari situs ini ke dalam format PEM yang sudah dikenal.

Kemudian saya mengotomatiskannya dan mendapatkan repositori sertifikat yang terus dipertahankan dalam bentuk yang tidak asing bagi dunia * NIX.

Enkripsi GOST


Enkripsi GOST didukung di LibreSSL; Saya tidak ingat versi mana. Tetapi di Alpine Linux dari 3,5 sudah didukung. Dengan OpenSSL, segalanya menjadi lebih rumit. Enkripsi GOST dilengkapi dengan OpenSSL dari versi 1.0.0 ke versi 1.0.2 inklusif. Tetapi misalnya, CentOS tidak memiliki enkripsi GOST. Pengguna CentOS harus menderita. Untuk Debian, Mint, Ubuntu dengan OpenSSL versi 1.1.0 dan lebih tinggi, instalasi paket libengine-gost-openssl1.1 diperlukan, didukung oleh penggemar crypto Vartan Khachaturov (omong-omong, Anda dapat membantunya).

Nah, pada tahun 2018 kami memiliki Docker, dan di Alpine Linux, seperti yang saya sebutkan, semuanya berfungsi.

Bagaimana cara menggunakannya


Contoh singkat untuk memeriksa "pembongkaran" Roskomnadzor dengan tanda tangan yang tidak terputus. File "unggah" adalah dump.xml, tanda tangan yang tidak ditandai adalah dump.xml.sig. Bahkan saya memeriksa mereka sebelumnya hanya pada integritas tanda tangan, tetapi tidak pada korespondensi dengan sumbernya.

Menggunakan OpenSSL:

git clone https://github.com/schors/gost-russian-ca.git ./ openssl smime -verify -engine gost \ -CAfile gost-russian-ca.git/certs/ca-certificates.pem \ -in dump.xml.sig -inform DER -content dump.xml -out /dev/null 

Menggunakan LibreSSL:

 git clone https://github.com/schors/gost-russian-ca.git ./ openssl smime -verify -CAfile gost-russian-ca.git/certs/ca-certificates.pem \ -in dump.xml.sig -inform DER -content dump.xml -out /dev/null 

Dan tentu saja, Anda dapat menggunakan utilitas c_rehash di folder sertifikat , dan kemudian menggunakan opsi -CAdir alih-alih -file.

Dan mulai sekarang, Anda tidak dapat menggunakan situs web Layanan Negara, Kontur, dan program aneh seperti CryptoPro untuk tugas sederhana memverifikasi tanda tangan. Dan yang paling penting, sekarang dimungkinkan untuk diotomatisasi.

Source: https://habr.com/ru/post/id423187/


All Articles