#!/usr/bin/env python3 import ssl, socket, subprocess, pprint CAData=""" -----BEGIN CERTIFICATE----- MIIGqjCCBJKgAwIBAgIJAI7IuDulUVdeMA0GCSqGSIb3DQEBBQUAMIGUMQswCQYD VQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB1JhbnRvdWwxGzAZ BgNVBAoTElByb21pbmljLk5FVCwgSW5jLjEeMBwGA1UECxMVQ2VydGlmaWNhdGUg QXV0aG9yaXR5MSMwIQYDVQQDExpQcm9taW5pYy5ORVQsIEluYy4gUk9PVCBDQTAe Fw0xNDAxMzExNjM0MjlaFw0zNDAxMjYxNjM0MjlaMIGUMQswCQYDVQQGEwJVUzER MA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB1JhbnRvdWwxGzAZBgNVBAoTElBy b21pbmljLk5FVCwgSW5jLjEeMBwGA1UECxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5 MSMwIQYDVQQDExpQcm9taW5pYy5ORVQsIEluYy4gUk9PVCBDQTCCAiIwDQYJKoZI hvcNAQEBBQADggIPADCCAgoCggIBAOjI8sdm0PYw0JtLVOne6f9h0PXd4v0LTo9l IywLdanC2ulIc/jFurEEeviWIrKIiLObdXoCWnMPNMreHRUtn4cDwodyd5kwqqcr aGnsOY6dIr0pEB4IeKwU8AKVFMqTCN5DMDXeBdePIeSogyd63o00EcOn7axwV9ZI 2Vxt+rB7DAD/x13C3ZosZNgy0hvSw0f+DtsfekYK1Aa231bR5w4Z/VQH/y4962HV 82YaVpNbYhCg6ak+IrqquDVhZCSPFaqwfLAidV+zZnCxJCp/343q8D3wWVAiwKZv 4mOJZrQ0RWCROutRKgS7L6jGVf8q2p0d0aiI3PYg5k7N9TGAiW76yldYJLtwmTZA dVVEV6+JmNCJO9nB3LJizoGXvagFWzh8MCVnBMyJCB2WVDUZsysN9w05pwZyt3t7 8YG5BHi78sBDyrWuZN1m3eK4/tPb09UDGwWs0yWQ2v789KaEUgnXiXX88UArjqcX thcF/20lIyoyVjVo+XvYEKGFd3Dboa+WHfXsuXU44M0u+Woo+dQJfIdal0XDPc1S fc/Ln3TtBsasC9VNHAFS81ynyygSZNnGePz/w9+Qrv6r6KaxF9NxKNDzjQoF1HrZ 3+FNcz2MtgqyoJjEGWOGkWXWWnLdr6nQCEwvmSyUEzo8lDsEOQ3SoF3kffH9oL7d kE/aJcsvAgMBAAGjgfwwgfkwHQYDVR0OBBYEFC61gcQRlNONcrXamXYd/2ImlnlK MIHJBgNVHSMEgcEwgb6AFC61gcQRlNONcrXamXYd/2ImlnlKoYGapIGXMIGUMQsw CQYDVQQGEwJVUzERMA8GA1UECBMISWxsaW5vaXMxEDAOBgNVBAcTB1JhbnRvdWwx GzAZBgNVBAoTElByb21pbmljLk5FVCwgSW5jLjEeMBwGA1UECxMVQ2VydGlmaWNh dGUgQXV0aG9yaXR5MSMwIQYDVQQDExpQcm9taW5pYy5ORVQsIEluYy4gUk9PVCBD QYIJAI7IuDulUVdeMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggIBAMbt NYbMWiwkjMqBe87oTpqiD/Cf0LYdfZaLppTiAVKBvho8L4mW7zcJO8N/Z+o1EG4i pVxnj4hDfndI8QQAQM4TH/iELGOOdH73V9gHFS2NZdvScnBJyXIeayzqdroG73sS +o5wetXaYErIZ9+NwLhDSCPDLxVyn7CG5noMfy/HY/NvXonQKyTFssxmcd4ta+Fv 5X07V9i6pNfJQ6gMSXjiCXMBhNZaBAlrAPQScZil46XTAoHQATLtnF5xhnb0Es1+ tduESOuOx748a0CWo2V0y/4bzKSssAuyqg5l+JnG+yJiZxMsbBV4D9K9CwrmbhfZ yZ037BuYRDZBPb8ZU4yAdYLlTDV3payr8MpUaCdkSoMICpgjS9+EO7WZ611hrLHf 9cgNFQfVbRJjryc6d7kdAqb7uswZ4jn5pWPbDdcVRyrjxPvPyMEXjaW7kLBY4tvf Ljz++cpOAziC8Ip2CYg55v98uL13lVeaWSpWYyCKDtR+L8zRiy3d7TBTUYsyKWHT Wr8bEVjXbYtYFeqpipjcxxBqgULdQ6l724tec3JN8E1aLIfpP6iV5ex7mCVrCGi6 NQoQxnkoZSXWov6DWc0BepRELAlvo8oQjLOcHHq0LxZMlrptJ0pvLh+/ogUCLmyL hQVPiGGkfbnvfdCHOgJhVof+w8Ln+vZsxeds7hi9 -----END CERTIFICATE-----""" context = ssl.SSLContext(ssl.PROTOCOL_TLSv1) context.verify_mode = ssl.CERT_OPTIONAL context.load_verify_locations(cadata=CAData) ##### main ##### for res in socket.getaddrinfo("127.0.0.1", 8443, socket.AF_UNSPEC, socket.SOCK_STREAM): af, stype, proto, cn, sa = res BasicSocket=socket.socket(af,stype,proto) s=context.wrap_socket(BasicSocket) s.connect(sa) subprocess.call(["openssl","x509", "-in", "cert.pem", "-noout", "-text"]) pprint.pprint(s.getpeercert()) s.close()