def _initializeMXPI(serverName, serverPort, protocol, MxpiMain5_1SoapBindingStubClass, VerifyAllHostnameVerifierClass): serverPortName = 'MxpiMain5_1' namespaceURI = "urn:client.v5_1.soap.mx.hp.com" serviceName = "MxpiMainService" wsdlURL = "%s://%s:%s/mxsoap/services/%s?wsdl" % (protocol, serverName, serverPort, serverPortName) # Set trust manager if protocol == 'https': verifyAllHostnameVerifier = VerifyAllHostnameVerifierClass() sslContext = SSLContextManager.getAutoAcceptSSLContext() HttpsURLConnection.setDefaultSSLSocketFactory(sslContext.getSocketFactory()) HttpsURLConnection.setDefaultHostnameVerifier(verifyAllHostnameVerifier) ## Set trust all SSL Socket to accept all certificates System.setProperty("ssl.SocketFactory.provider", "TrustAllSSLSocketFactory") Security.setProperty("ssl.SocketFactory.provider", "TrustAllSSLSocketFactory") # Try and initialize connection simBindingStub = MxpiMain5_1SoapBindingStubClass() simServiceFactory = ServiceFactory.newInstance() simService = simServiceFactory.createService(URL(wsdlURL), QName(namespaceURI, serviceName)) theMxpiMain = simService.getPort(QName(namespaceURI, serverPortName), simBindingStub.getClass()) return theMxpiMain
def doService(httpMethod, url, credential, requestBody=None): Security.addProvider(MySSLProvider()) Security.setProperty("ssl.TrustManagerFactory.algorithm", "TrustAllCertificates") HttpsURLConnection.setDefaultHostnameVerifier(MyHostnameVerifier()) urlObj = URL(url) con = urlObj.openConnection() con.setRequestProperty("Accept", "application/xml") con.setRequestProperty("Content-Type", "application/xml") con.setRequestProperty("Authorization", credential) con.setDoInput(True); if httpMethod == 'POST': con.setDoOutput(True) con.setRequestMethod(httpMethod) output = DataOutputStream(con.getOutputStream()); if requestBody: output.writeBytes(requestBody); output.close(); responseCode = con.getResponseCode() logger.info('response code: ' + str(responseCode)) responseMessage = con.getResponseMessage() logger.info('response message: ' + str(responseMessage)) contentLength = con.getHeaderField('Content-Length') logger.info('content length: ' + str(contentLength)) stream = None if responseCode == 200 or responseCode == 201 or responseCode == 202: stream = con.getInputStream() elif contentLength: stream = con.getErrorStream() if stream: dataString = getStreamData(stream) logger.info(httpMethod + ' url: ' + url) if not url.endswith('.xsd') and len(dataString) < 4096: xmlStr = Util.prettfyXmlByString(dataString) logger.info(httpMethod + ' result: \n\n' + xmlStr) else: logger.info('response body too big, no print out') if responseCode == 200 or responseCode == 201 or responseCode == 202: return dataString else: ''' to mark the case failed if response code is not 200-202 ''' return None else: logger.error('') logger.error('---------------------------------------------------------------------------------------------------') logger.error('-------->>> Input or Error stream is None, it may be a defect if it is positive test case') logger.error('---------------------------------------------------------------------------------------------------') logger.error('') return None
def testPage(self, page): class MyTrustManager(X509TrustManager): def getAcceptedIssuers(self): return None def checkClientTrusted(self, certs, auth): pass def checkServerTrusted(self, certs, auth): pass trustAllCerts = [MyTrustManager()] sc = SSLContext.getInstance("SSL") sc.init(None, trustAllCerts, SecureRandom()) HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()) class MyHostnameVerifier(HostnameVerifier): def verify(self, host, sess): return True HttpsURLConnection.setDefaultHostnameVerifier(MyHostnameVerifier()) try: httpsURL = 'https://%s:%s/%s' % (self._host, self._port, page) url = URL(httpsURL) conn = url.openConnection() conn.setConnectTimeout(5000) conn.setRequestProperty("Accept-encoding", 'gzip,deflate,compress') conn.setRequestProperty( "User-agent", 'https://google.com/' if 'google' not in self._host else 'https://yandex.ru/') # Use foreign referer #ist = conn.getInputStream() #isr = InputStreamReader(ist) #br = BufferedReader(isr) print("[BREACH] Received response: %d" % conn.getResponseCode()) if conn.getContentEncoding() != None: print("[BREACH] Received Content-encoding: %s" % (conn.getContentEncoding())) return True except: print("[BREACH] Socket timeout or an error occurred") return False
from javax.net.ssl import TrustManager, X509TrustManager from jarray import array from javax.net.ssl import SSLContext class TrustAllX509TrustManager(X509TrustManager): '''Define a custom TrustManager which will blindly accept all certificates''' def checkClientTrusted(self, chain, auth): pass def checkServerTrusted(self, chain, auth): pass def getAcceptedIssuers(self): return None # Create a static reference to an SSLContext which will use # our custom TrustManager trust_managers = array([TrustAllX509TrustManager()], TrustManager) TRUST_ALL_CONTEXT = SSLContext.getInstance("SSL") TRUST_ALL_CONTEXT.init(None, trust_managers, None) from javax.net.ssl import SSLContext SSLContext.setDefault(TRUST_ALL_CONTEXT) from javax.net.ssl import HostnameVerifier, HttpsURLConnection class AllHostsVerifier(HostnameVerifier): def verify(self, urlHostname, session): return True HttpsURLConnection.setDefaultHostnameVerifier(AllHostsVerifier())