Helpviewer/SslInfoDialog.py

Tue, 18 Oct 2011 18:57:12 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 18 Oct 2011 18:57:12 +0200
branch
5_1_x
changeset 1372
78a9250e52de
parent 791
9ec2ac20e54e
child 1510
e75ecf2bd9dd
permissions
-rw-r--r--

Fixed a security issue using QLabel for showing SSL certificate infos.

659
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
1 # -*- coding: utf-8 -*-
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
2
791
9ec2ac20e54e Updated copyright notice.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 753
diff changeset
3 # Copyright (c) 2010 - 2011 Detlev Offenbach <detlev@die-offenbachs.de>
659
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
4 #
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
5
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
6 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
7 Module implementing a dialog to show SSL certificate infos.
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
8 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
9
1372
78a9250e52de Fixed a security issue using QLabel for showing SSL certificate infos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
10 from PyQt4.QtCore import QCryptographicHash, Qt
659
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
11 from PyQt4.QtGui import QDialog
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
12 from PyQt4.QtNetwork import QSslCertificate
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
13
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
14 from .Ui_SslInfoDialog import Ui_SslInfoDialog
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
15
753
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 664
diff changeset
16 import Utilities
e19a516f0a97 Continued implementing the certificate manager.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 664
diff changeset
17
659
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
18 class SslInfoDialog(QDialog, Ui_SslInfoDialog):
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
19 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
20 Class implementing a dialog to show SSL certificate infos.
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
21 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
22 def __init__(self, certificate, parent = None):
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
23 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
24 Constructor
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
25
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
26 @param certificate reference to the SSL certificate (QSslCertificate)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
27 @param parent reference to the parent widget (QWidget)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
28 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
29 QDialog.__init__(self, parent)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
30 self.setupUi(self)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
31
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
32 self.subjectCommonNameLabel.setText(self.__certificateString(
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
33 certificate.subjectInfo(QSslCertificate.CommonName)))
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
34 self.subjectOrganizationLabel.setText(self.__certificateString(
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
35 certificate.subjectInfo(QSslCertificate.Organization)))
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
36 self.subjectOrganizationalUnitLabel.setText(self.__certificateString(
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
37 certificate.subjectInfo(QSslCertificate.OrganizationalUnitName)))
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
38 self.serialNumberLabel.setText(self.__serialNumber(certificate))
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
39 self.issuerCommonNameLabel.setText(self.__certificateString(
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
40 certificate.issuerInfo(QSslCertificate.CommonName)))
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
41 self.issuerOrganizationLabel.setText(self.__certificateString(
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
42 certificate.issuerInfo(QSslCertificate.Organization)))
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
43 self.issuerOrganizationalUnitLabel.setText(self.__certificateString(
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
44 certificate.issuerInfo(QSslCertificate.OrganizationalUnitName)))
1372
78a9250e52de Fixed a security issue using QLabel for showing SSL certificate infos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
45 self.effectiveLabel.setText(Qt.escape(
78a9250e52de Fixed a security issue using QLabel for showing SSL certificate infos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
46 certificate.effectiveDate().toString("yyyy-MM-dd")))
78a9250e52de Fixed a security issue using QLabel for showing SSL certificate infos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
47 self.expiresLabel.setText(Qt.escape(
78a9250e52de Fixed a security issue using QLabel for showing SSL certificate infos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
48 certificate.expiryDate().toString("yyyy-MM-dd")))
659
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
49 self.sha1Label.setText(self.__formatHexString(
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
50 str(certificate.digest(QCryptographicHash.Sha1).toHex(), encoding = "ascii")))
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
51 self.md5Label.setText(self.__formatHexString(
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
52 str(certificate.digest(QCryptographicHash.Md5).toHex(), encoding = "ascii")))
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
53
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
54 def __certificateString(self, txt):
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
55 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
56 Private method to prepare some text for display.
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
57
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
58 @param txt text to be displayed (string)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
59 @return prepared text (string)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
60 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
61 if txt is None or txt == "":
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
62 return self.trUtf8("<not part of the certificate>")
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
63
1372
78a9250e52de Fixed a security issue using QLabel for showing SSL certificate infos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
64 return Qt.escape(Utilities.decodeString(txt))
659
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
65
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
66 def __serialNumber(self, cert):
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
67 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
68 Private slot to format the certificate serial number.
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
69
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
70 @param cert reference to the SSL certificate (QSslCertificate)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
71 @return formated serial number (string)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
72 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
73 serial = cert.serialNumber()
664
3061f8bd826e Fixed a few issues on Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 659
diff changeset
74 if serial == "":
3061f8bd826e Fixed a few issues on Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 659
diff changeset
75 return self.trUtf8("<not part of the certificate>")
3061f8bd826e Fixed a few issues on Windows systems.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 659
diff changeset
76
659
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
77 if ':' in serial:
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
78 return str(serial, encoding = "ascii").upper()
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
79 else:
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
80 hexString = hex(int(serial))[2:]
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
81 return self.__formatHexString(hexString)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
82
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
83 def __formatHexString(self, hexString):
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
84 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
85 Private method to format a hex string for display.
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
86
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
87 @param hexString hex string to be formatted (string)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
88 @return formatted string (string)
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
89 """
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
90 hexString = hexString.upper()
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
91
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
92 if len(hexString) % 2 == 1:
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
93 hexString = '0' + hexString
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
94
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
95 hexList = []
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
96 while hexString:
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
97 hexList.append(hexString[:2])
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
98 hexString = hexString[2:]
b53e67ae2021 Added code to show certificate info for https URLs.
Detlev Offenbach <detlev@die-offenbachs.de>
parents:
diff changeset
99
1372
78a9250e52de Fixed a security issue using QLabel for showing SSL certificate infos.
Detlev Offenbach <detlev@die-offenbachs.de>
parents: 791
diff changeset
100 return Qt.escape(':'.join(hexList))

eric ide

mercurial