
أصبحت الشهادات المؤهلة بسرعة جزءًا لا يتجزأ من الحياة اليومية. والمزيد والمزيد من الناس يريدون رؤية هذا "الوحش" من الداخل. هذا من ناحية. من ناحية أخرى ، يتم تطوير المزيد والمزيد من التطبيقات التي يتم فيها استخدام المعلومات من هذه الشهادات. وهذه ليست فقط سمات رقم التعريف الضريبي أو رقم التعريف الشخصي لمالك الشهادة أو ناشرها. يمكن أن تكون هذه معلومات حول موفر التشفير الذي تم استخدامه من قبل حامل الشهادة (سمة subjectSignTool) لإنشاء مفتاح خاص أو على أساسه معتمد تم إنشاء مركز شهادة (CA) أصدر شهادة معينة. وإذا قمت بكتابة برنامج يقوم بتحليل الشهادات الصادرة ، يمكنك جمع إحصائيات مثيرة للاهتمام حول أدوات حماية معلومات التشفير التي يستخدمها حاملو الشهادات وعلى أساس الأموال (وإن كانت أقل إثارة للاهتمام) التي تم نشرها (أو غير المعتمدة) CAs (سمة issuerSignTools):

في المساحات المفتوحة في هبر ،
تمت المحاولة الناجحة لفرز الشهادة المؤهلة. لسوء الحظ ، كان التحليل يتعلق فقط بالحصول على السمات TIN و PSRN و SNILS ، وهي جزء من الاسم المميز DN (الاسم المميز). على الرغم ، لماذا للأسف؟ كان المؤلف مشكلة محددة وتم حلها. نريد الوصول إلى سمات الشهادة المؤهلة من خلال Python وإعطاء أداة رسومية لعرضها.
للوصول إلى سمات الشهادة ،
سنستخدم حزمة
fsb795 . الحزمة متاحة لكل من Pytho2 و Python3 ، لكل من Linux و Windows. لتثبيته ، فقط قم بتشغيل الأمر التقليدي:
تتطلب حزمة fsb795 حزم وحدات pyasn1 و pyasn1. لذلك ، إذا لم يتم تثبيتها ، فستتم محاولة تثبيتها.
بالنسبة إلى python3 ، يبدو هذا الأمر كما يلي:
يمكنك أيضًا تنزيل حزم تثبيت
python3 و
python2 وتثبيتها محليًا.
يشير اسم الحزمة ، عن طريق القياس مع الوحدات النمطية من حزمة pyasn1-modules ، على سبيل المثال ، rfc2459 ، وما إلى ذلك ، إلى أنها مصممة للعمل مع الشهادات التي تلبي متطلبات أمر خدمة الأمن الفيدرالي للاتحاد الروسي في 27 ديسمبر 2011
رقم 795 "عند الموافقة متطلبات شكل شهادة مؤهلة ... ".
يتم تنفيذ الوصول إلى الشهادة في حزمة fsb795 من خلال فئة الشهادة:
لإنشاء مثيل لكائن لشهادة معينة ، يكفي تنفيذ العبارة التالية:
$ 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(</ >) >>
كمعلمة ، عند إنشاء مثيل للفئة ، يتم تحديد شهادة ، والتي يمكن أن تكون إما في ملف PEM أو DER أو سلسلة في تنسيق PEM.
بعد الإنشاء ، يكون لكل مثيل أربع سمات: pyver و formatCert و cert_full و cert.
باستخدام السمة pyver ، يمكنك التحقق من كيفية إجراء التحليل اللغوي للشهادة. إذا كان pyver يساوي سلسلة فارغة ، فإن الملف أو السلسلة لا تحتوي على شهادة. خلاف ذلك ، تحتوي السمة pyver على إصدار لغة 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 >>>
تحتوي السمة formatCert ، عند إنشاء مثيل لفئة الشهادة بنجاح ، على نوع تنسيق الملف / السلسلة للشهادة. يمكن أن يكون PEM أو DER. ستصبح سبب الحاجة إلى هذه السمة واضحًا أدناه.
تم إنشاء حزمة
fsb795 باستخدام حزمة
pyasn1 . لذلك ، بقيت صفتان غير مفحوصتين. تخزن السمة cert شهادة tbs ، جاهزة للاستخدام مع حزمة pyasn1. تقوم سمة cert_full أخرى بتخزين الشهادة التي تم فك تشفيرها بالكامل فيما يتعلق بـ rfc2459. نعرض كيفية الحصول على خوارزمية المفتاح العام مع السمة cert وحزمة pyasn1 المتصلة:
>>> pubkey = c2.cert['subjectPublicKeyInfo'] >>> ff = pubkey['algorithm'] >>> ff1 = ff['algorithm'] >>> print (ff1) 1.2.643.2.2.19 >>>
في النهاية ، سيكون من الممكن تقييم إمكانات حزمة fsb795 للحصول على معلومات حول المفتاح العام لشهادة مؤهلة.
عند إنشاء مثيل لفئة الشهادة بنجاح ، لدينا طرق التخلص التي تسهل الحصول على البيانات اللازمة من الشهادة. يمكن الحصول على جميع المعلومات حول المفتاح العام على النحو التالي:
>>> 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 >>>
تحتوي فئة الشهادة حاليًا على الطرق التالية:
- subjectSignTool () - إرجاع سلسلة باسم حامل شهادة حماية معلومات التشفير ؛
- issuerSignTool () - إرجاع قائمة بأربعة عناصر مع أدوات تشفير المعلومات لمصدر الشهادة ؛
- classUser () - تقوم بإرجاع سلسلة مع الأوساط من فئات الأمان لمالك شهادة حماية معلومات التشفير ، مفصولة بالحروف "؛؛" ؛
- issuerCert () - إرجاع قاموس يحتوي على حقول وقيم الاسم المميز DN لمصدر الشهادة ورقم يحدد الشهادة (2 - كيان قانوني) ؛
- subjectCert () - إرجاع قاموس يحتوي على حقول وقيم الاسم المميز DN لصاحب الشهادة ورقم يشير إلى عضوية الشهادة (2 - كيان قانوني) ؛
- publicKey () - إرجاع قاموس يحتوي على قيمة المفتاح ('valuepk') والمعلمات الرئيسية ('curve' و 'hash') ؛
- signatureCert - إرجاع قيمتين: خوارزمية التوقيع وقيمة التوقيع ؛
- validityCert - إرجاع قاموس بمفتاحين "not_after" و "not_before" ؛
- keyUsage () - إرجاع قائمة نطاقات المفاتيح ؛
- serialNumber () - إرجاع الرقم التسلسلي للشهادة بصيغة عشرية ؛
- prettyPrint () - تُرجع سلسلة تحتوي على "نسخة مطبوعة" من الشهادة من حيث pyasn1 (self.cert_full.prettyPrint ()).
يحتوي المفسد على مثال اختباري يوضح بوضوح عمل هذه الأساليب.
اختبار test795.py لاختبار حزمة 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----- """
لتشغيل مثال اختباري ، فقط قم بتشغيل الأمر:
$python test795.py
مع وجود حزمة fsb795 تحت تصرفها ، كان من الطبيعي أن تكتب في بيثون أداة رسومية مستقلة ومستقلة عن المنصة لعرض الشهادات المؤهلة. تم استخدام حزمة Tkinter كدعم رسومي:
تحتوي الأداة المساعدة
viewCertFL63 على ثلاث علامات تبويب. تعرض علامة التبويب "حول الشهادة" ، من بين أشياء أخرى ، الوقت الحالي. سنعود إليها أدناه. لتحديد شهادة ، ما عليك سوى النقر فوق الزر "تحديد":

انتبه إلى الزر (لن يرى أولئك الذين يعملون على Windows هذا الزر) ، فهو يسمح لك بإخفاء ما يسمى الملفات / الدلائل غير المرئية (المخفية). لكي يظهر هذا الزر ، يكفي تنفيذ الأوامر التالية:
if sys.platform != "win32": root.tk.call('set', '::tk::dialog::file::showHiddenBtn', '1') root.tk.call('set', '::tk::dialog::file::showHiddenVar', '0')
زر مفيد للغاية. لذلك ، بعد اختيار الشهادة ، ستأخذ علامة التبويب "حول الشهادة" الشكل التالي:


والجدير بالذكر هنا هو أنه إذا انتهت صلاحية الشهادة أثناء عرض الشهادة ، فإن الطباعة على الأيقونة الموجودة في الزاوية اليسرى العليا سوف تنقسم إلى نصفين. يمكن لأي شخص أن يقتنع بهذا ، ويعيد ترتيب الساعة على الكمبيوتر لمدة عام مقدمًا.
في علامة التبويب "التفاصيل" ، يمكنك عرض تفاصيل السمة المحددة لشهادة مؤهلة بالتفصيل:

وأخيرًا ، علامة التبويب الثالثة هي "نص". تعرض علامة التبويب هذه محتويات الشهادة بأكملها:

لعرض الشهادة ، يمكنك استخدام ليس فقط Python (الزر "Python") ، ثم الأدوات opensl و pp من خدمات شبكة الأمان (NSS). إذا لم يكن لدى شخص ما هذه الأدوات المساعدة ، فيمكن الحصول على الأداة الأولى عن طريق جمع opensl مع دعم التشفير الروسي. عند استخدام الأداة المساعدة pp ، يبدو إخراج الشهادة كما يلي:

أعلاه ، ذكرنا السمة formatCert لفئة الشهادة لحزمة fsb795. لذلك نحن بحاجة إلى قيمة هذه السمة للإشارة إلى تنسيق الملف مع الشهادة عند تشغيل هذه الأداة المساعدة أو تلك. على سبيل المثال ، يبدو استدعاء الأداة المساعدة pp بتنسيق ملف PEM كما يلي:
$pp –tc –u –a –i < >
يشير الخيار -a إلى تنسيق ملف PEM. لتنسيق DER ، لم يتم تحديده.
يتم تعيين المعلمة "–inform" لـ opensl بنفس الطريقة.
يتم استخدام زر الأداة المساعدة للإشارة إلى المسار إلى opensl أو pp المرافق.
توجد توزيعات الأداة المساعدة ViewCertFL63
هنا .
تم إنشاء التوزيعات باستخدام حزمة pyinstaller:
$python pyinstaller.py --noconsole -F viewCertFL63.py