
Sertifikat yang memenuhi syarat dengan cepat menjadi bagian integral dari kehidupan sehari-hari. Dan semakin banyak orang ingin melihat "binatang" ini dari dalam. Ini di satu sisi. Di sisi lain, semakin banyak aplikasi yang dikembangkan di mana informasi dari sertifikat ini digunakan. Dan ini bukan hanya atribut TIN atau BIN dari pemilik atau penerbit sertifikat. Ini dapat berupa informasi tentang penyedia kriptografi mana yang digunakan oleh pemegang sertifikat (atribut subjectSignTool) untuk menghasilkan kunci pribadi atau atas dasar yang disertifikasi berarti pusat sertifikasi (CA) dibuat yang mengeluarkan sertifikat. Dan jika Anda menulis sebuah program yang akan menganalisis sertifikat yang dikeluarkan, Anda dapat mengumpulkan statistik menarik tentang alat perlindungan informasi kriptografi yang digunakan oleh pemegang sertifikat dan atas dasar apa (meskipun kurang menarik) dana bersertifikasi (atau tidak bersertifikasi) yang digunakan CA (atribut issuerSignTools):

Di ruang terbuka Habr,
upaya yang berhasil telah dilakukan
untuk membongkar sertifikat yang memenuhi syarat. Sayangnya, analisis hanya menyangkut penerimaan atribut TIN, PSRN, dan SNILS yang merupakan bagian dari DN Distinguished Name. Meskipun, mengapa sayangnya? Penulis memiliki masalah khusus dan diselesaikan. Kami ingin mengakses atribut sertifikat yang memenuhi syarat melalui Python dan memberikan utilitas grafis untuk melihatnya.
Untuk mengakses atribut sertifikat, kami akan menggunakan paket
fsb795 . Paket ini tersedia untuk Pytho2 dan Python3, baik untuk Linux dan untuk Windows. Untuk menginstalnya, jalankan saja perintah tradisional:
Paket fsb795 membutuhkan paket modul pyasn1 dan pyasn1. Oleh karena itu, jika mereka tidak diinstal, akan dilakukan upaya untuk menginstalnya.
Untuk python3, perintah ini terlihat seperti ini:
Anda juga dapat mengunduh paket instalasi
python3 dan
python2 dan
menginstalnya secara lokal.
Nama paket, dengan analogi dengan modul dari paket pyasn1-modules, misalnya, rfc2459, dll., Menunjukkan bahwa ia dirancang untuk bekerja dengan sertifikat yang memenuhi persyaratan Orde Layanan Keamanan Federal Federasi Rusia 27 Desember 2011
No. 795 “Atas persetujuan persyaratan untuk bentuk sertifikat yang memenuhi syarat ... ".
Akses ke sertifikat dalam paket fsb795 diimplementasikan melalui kelas Sertifikat:
Untuk membuat instance objek untuk sertifikat tertentu, cukup untuk menjalankan pernyataan berikut:
$ python Python 2.7.15 (default, May 23 2018, 14:20:56) [GCC 5.4.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>import fsb795 >>tek_cert = fsb795.Certificate(</ >) >>
Sebagai parameter, saat membuat turunan kelas, sertifikat ditentukan, yang bisa berupa file PEM atau DER atau string dalam format PEM.
Setelah pembuatan, setiap instance memiliki empat atribut: pyver, formatCert, cert_full dan cert.
Dengan menggunakan atribut pengupas, Anda dapat memeriksa bagaimana penguraian sertifikat. Jika pengupas sama dengan string kosong, maka file atau string tidak mengandung sertifikat. Jika tidak, atribut pyver berisi versi bahasa python:
>>> c1=fsb795.Certificate(' ') >>> if (c1.pyver == ''): ... print (' ') ... >>> c2 = fsb795.Certificate('/home/a513/cert_nss.der') >>> if (c2.pyver != ""): ... print(c2.pyver) ... 2 >>> print(c2.formatCert) DER >>>
Atribut formatCert, ketika berhasil membuat turunan dari kelas Sertifikat, berisi jenis file / string format sertifikat. Itu bisa PEM atau DER. Mengapa atribut ini diperlukan akan menjadi jelas di bawah ini.
Paket fsb795 dibuat menggunakan paket
pyasn1 . Jadi, dua atribut tetap tidak diteliti. Atribut cert menyimpan sertifikat tbs, siap digunakan dengan paket pyasn1. Atribut cert_full lain menyimpan seluruh sertifikat yang didekodekan sehubungan dengan rfc2459. Kami menunjukkan cara mendapatkan algoritma kunci publik dengan atribut cert dan paket pyasn1 yang terhubung:
>>> pubkey = c2.cert['subjectPublicKeyInfo'] >>> ff = pubkey['algorithm'] >>> ff1 = ff['algorithm'] >>> print (ff1) 1.2.643.2.2.19 >>>
Pada akhirnya, akan mungkin untuk mengevaluasi kemampuan paket fsb795 untuk mendapatkan informasi tentang kunci publik dari sertifikat yang berkualifikasi.
Ketika instance kelas Sertifikat berhasil dibuat, kami memiliki metode pembuangan kami yang membuatnya mudah untuk mendapatkan data yang diperlukan dari sertifikat. Semua informasi tentang kunci publik dapat diperoleh sebagai berikut:
>>> c3 = fsb795.Certificate('cert.der') >>> key_info=c3.publicKey() >>> for opt in key_info.keys(): ... val = str(key_info[opt]) ... print (opt + '=' + val) ... curve=1.2.643.2.2.36.0 hash=1.2.643.2.2.30.1 valuepk=5b785f86f0dd5316ba37c8440e398e83f2ec0c34478f90da9c0c8046d341ff66f9044cd00a0e25530 acefd51e6be852dbecacbaabc55e807be8e1f861658bd58 algo=1.2.643.2.2.19 >>>
Saat ini, kelas Sertifikat berisi metode berikut:
- subjectSignTool () - mengembalikan string dengan nama pemegang sertifikat perlindungan informasi kriptografis
- issuerSignTool () - mengembalikan daftar empat elemen dengan alat kriptografi informasi dari penerbit sertifikat;
- classUser () - mengembalikan string dengan oids dari kelas keamanan sertifikat perlindungan informasi kriptografis dari pemegang sertifikat, dipisahkan oleh karakter ";;";
- issuerCert () - mengembalikan kamus dengan bidang dan nilai DN nama pembeda dari sertifikat dan nomor yang mengidentifikasi sertifikat (2 - badan hukum);
- subjectCert () - mengembalikan kamus dengan bidang dan nilai DN nama dibedakan dari pemegang sertifikat dan nomor yang mengidentifikasi sertifikat (2 - badan hukum);
- publicKey () - mengembalikan kamus yang berisi nilai kunci ('valuepk') dan parameter kunci ('kurva' dan 'hash');
- signatureCert - mengembalikan dua nilai: algoritme tanda tangan dan nilai tanda tangan;
- validityCert - mengembalikan kamus dengan dua tombol 'not_after' dan 'not_before';
- keyUsage () - mengembalikan daftar cakupan kunci;
- serialNumber () - mengembalikan nomor seri sertifikat dalam bentuk desimal;
- prettyPrint () - mengembalikan string dengan 'cetakan' sertifikat dalam hal pyasn1 (self.cert_full.prettyPrint ()).
Spoiler berisi contoh uji yang dengan jelas menunjukkan pekerjaan metode ini.
Uji test795.py untuk menguji paket fsb795 import fsb795 certpem = """ -----BEGIN CERTIFICATE----- MIIG3DCCBougAwIBAgIKE8/KkAAAAAAC4zAIBgYqhQMCAgMwggFKMR4wHAYJKoZI hvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJVMRwwGgYDVQQIDBM3 NyDQsy4g0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxPzA9BgNV BAkMNjEyNTM3NSDQsy4g0JzQvtGB0LrQstCwLCDRg9C7LiDQotCy0LXRgNGB0LrQ sNGPLCDQtC4gNzEsMCoGA1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+ 0YHRgdC40LgxGDAWBgUqhQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEB EgwwMDc3MTA0NzQzNzUxQTA/BgNVBAMMONCT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+ 0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMB4XDTE4MDcwOTE1MjYy NFoXDTI3MDcwOTE1MjYyNFowggFVMR4wHAYJKoZIhvcNAQkBFg9jb250YWN0QGVr ZXkucnUxITAfBgNVBAMMGNCe0J7QniDCq9CV0LrQtdC5INCj0KbCuzEwMC4GA1UE Cwwn0KPQtNC+0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAMSEwHwYD VQQKDBjQntCe0J4gwqvQldC60LXQuSDQo9CmwrsxCzAJBgNVBAYTAlJVMRgwFgYD VQQIDA83NyDQnNC+0YHQutCy0LAxRDBCBgNVBAkMO9Cj0JvQmNCm0JAg0JjQm9Cs 0JjQndCa0JAsINCULjQsINCQ0J3QotCgIDMg0K3Qojsg0J/QntCcLjk0MRgwFgYD VQQHDA/Qsy7QnNC+0YHQutCy0LAxGDAWBgUqhQNkARINMTE0Nzc0NjcxNDYzMTEa MBgGCCqFAwOBAwEBEgwwMDc3MTA5NjQzNDgwYzAcBgYqhQMCAhMwEgYHKoUDAgIk AAYHKoUDAgIeAQNDAARAW3hfhvDdUxa6N8hEDjmOg/LsDDRHj5DanAyARtNB/2b5 BEzQCg4lUwrO/VHmvoUtvsrLqrxV6Ae+jh+GFli9WKOCA0AwggM8MBIGA1UdEwEB /wQIMAYBAf8CAQAwHQYDVR0OBBYEFMQYnG5GfYRnj2ehEQ5tv8Fso/qBMAsGA1Ud DwQEAwIBRjAdBgNVHSAEFjAUMAgGBiqFA2RxATAIBgYqhQNkcQIwKAYFKoUDZG8E Hwwd0KHQmtCX0JggwqvQm9CY0KDQodCh0JstQ1NQwrswggGLBgNVHSMEggGCMIIB foAUi5g7iRhR6O+cAni46sjUILJVyV2hggFSpIIBTjCCAUoxHjAcBgkqhkiG9w0B CQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxHDAaBgNVBAgMEzc3INCz LiDQnNC+0YHQutCy0LAxFTATBgNVBAcMDNCc0L7RgdC60LLQsDE/MD0GA1UECQw2 MTI1Mzc1INCzLiDQnNC+0YHQutCy0LAsINGD0LsuINCi0LLQtdGA0YHQutCw0Y8s INC0LiA3MSwwKgYDVQQKDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7RgdGB 0LjQuDEYMBYGBSqFA2QBEg0xMDQ3NzAyMDI2NzAxMRowGAYIKoUDA4EDAQESDDAw NzcxMDQ3NDM3NTFBMD8GA1UEAww40JPQvtC70L7QstC90L7QuSDRg9C00L7RgdGC 0L7QstC10YDRj9GO0YnQuNC5INGG0LXQvdGC0YCCEDRoHkDLQe8zqaC3yHaSmikw WQYDVR0fBFIwUDAmoCSgIoYgaHR0cDovL3Jvc3RlbGVjb20ucnUvY2RwL2d1Yy5j cmwwJqAkoCKGIGh0dHA6Ly9yZWVzdHItcGtpLnJ1L2NkcC9ndWMuY3JsMIHGBgUq hQNkcASBvDCBuQwj0J/QkNCa0JwgwqvQmtGA0LjQv9GC0L7Qn9GA0L4gSFNNwrsM INCf0JDQmiDCq9CT0L7Qu9C+0LLQvdC+0Lkg0KPQpsK7DDbQl9Cw0LrQu9GO0YfQ tdC90LjQtSDihJYgMTQ5LzMvMi8yLTk5OSDQvtGCIDA1LjA3LjIwMTIMONCX0LDQ utC70Y7Rh9C10L3QuNC1IOKEliAxNDkvNy8xLzQvMi02MDMg0L7RgiAwNi4wNy4y MDEyMAgGBiqFAwICAwNBALvjFGhdFE9llvlvKeQmZmkI5J+yO2jFWTh8nXPjIpiL OutUew2hIZv15pJ1QM/VgRO3BTBGDOoIrq8LvgC+3kA= -----END CERTIFICATE----- """
Untuk menjalankan contoh pengujian, jalankan perintah:
$python test795.py
Dengan paket fsb795 yang tersedia, adalah wajar untuk menulis dengan python sebuah utilitas grafis mandiri platform untuk melihat sertifikat yang memenuhi syarat. Paket Tkinter digunakan sebagai dukungan grafis:

Utilitas
viewCertFL63 memiliki tiga tab. Tab About Certificate, antara lain, menampilkan waktu saat ini. Kami akan kembali ke bawah. Untuk memilih sertifikat, cukup klik tombol "Pilih":

Perhatikan tombol (mereka yang bekerja pada Windows tidak akan melihat tombol ini), ini memungkinkan Anda untuk menyembunyikan apa yang disebut file / direktori tidak terlihat (tersembunyi). Agar tombol ini muncul, cukup jalankan perintah berikut:
if sys.platform != "win32": root.tk.call('set', '::tk::dialog::file::showHiddenBtn', '1') root.tk.call('set', '::tk::dialog::file::showHiddenVar', '0')
Tombol yang sangat berguna. Jadi, setelah memilih sertifikat, tab "Tentang Sertifikat" akan berbentuk:


Yang perlu diperhatikan di sini adalah bahwa jika sertifikat kedaluwarsa saat melihat sertifikat, maka cetakan pada ikon di sudut kiri atas akan pecah menjadi dua bagian. Semua orang dapat diyakinkan tentang hal ini, mengatur ulang jam di komputer selama satu tahun sebelumnya.
Pada tab Detail, Anda dapat melihat secara detail karakteristik atribut yang dipilih dari sertifikat yang memenuhi syarat:

Dan akhirnya, tab ketiga adalah "Teks". Tab ini menampilkan isi seluruh sertifikat:

Untuk melihat sertifikat, Anda dapat menggunakan tidak hanya Python (tombol "Python"), kemudian utilitas openssl dan pp dari Network Serurity Services (NSS). Jika seseorang tidak memiliki utilitas ini, maka yang pertama dapat diperoleh dengan mengumpulkan openssl dengan dukungan untuk kriptografi Rusia. Saat menggunakan utilitas pp, output sertifikat terlihat seperti ini:

Di atas, kami menyebutkan atribut formatCert dari kelas Sertifikat paket fsb795. Jadi kita perlu nilai atribut ini untuk menunjukkan format file dengan sertifikat saat menjalankan utilitas ini atau itu. Misalnya, menjalankan utilitas pp dengan format file PEM terlihat seperti ini:
$pp –tc –u –a –i < >
Opsi -a menunjukkan format file PEM. Untuk format DER, itu tidak ditentukan.
Parameter "–inform" untuk openssl diatur dengan cara yang sama.
Tombol Utilitas digunakan untuk menunjukkan jalur ke openssl atau utilitas pp.
Distribusi utilitas ViewCertFL63 terletak di
sini .
Distribusi dibangun menggunakan paket pyinstaller:
$python pyinstaller.py --noconsole -F viewCertFL63.py