Many users encounter javax.net. SSL. sslpeerunverifiedexception: no peer certificate exceptions when making HTTP requests for Sina authorization or Sina data. The solution is provided (tested ).
Write a custom class to inherit sslsocketfactory:
- Import java. Io. ioexception;
- Import java.net. Socket;
- Import java.net. unknownhostexception;
- Import java. Security. keymanagementexception;
- Import java. Security. keystore;
- Import java. Security. keystoreexception;
- Import java. Security. nosuchalgorithmexception;
- Import java. Security. unrecoverablekeyexception;
- Import javax.net. SSL. sslcontext;
- Import javax.net. SSL. trustmanager;
- Import javax.net. SSL. x509trustmanager;
- Import org. Apache. http. Conn. SSL. sslsocketfactory;
- Public class sslsocketfactoryex extends sslsocketfactory {
- Sslcontext = sslcontext. getinstance ("TLS ");
- Public sslsocketfactoryex (keystore truststore)
- Throws nosuchalgorithmexception, keymanagementexception,
- Keystoreexception, unrecoverablekeyexception {
- Super (truststore );
- Trustmanager TM = new x509trustmanager (){
- Public java. Security. cert. x509certificate [] getacceptedissuers () {return NULL ;}
- @ Override
- Public void checkclienttrusted (
- Java. Security. cert. x509certificate [] Chain, string authtype)
- Throws java. Security. cert. certificateexception {}
- @ Override
- Public void checkservertrusted (
- Java. Security. cert. x509certificate [] Chain, string authtype)
- Throws java. Security. cert. certificateexception {}
- };
- Sslcontext. INIT (null, new trustmanager [] {TM}, null );
- }
- @ Override
- Public socket createsocket (Socket socket, string host, int port, Boolean autoclose) throws ioexception, unknownhostexception {
- Return sslcontext. getsocketfactory (). createsocket (socket, host, port, autoclose );
- }
- @ Override
- Public socket createsocket () throws ioexception {
- Return sslcontext. getsocketfactory (). createsocket ();
- }
- }
Copy code
Let's take a look at how to perform callback:
- Public static httpclient getnewhttpclient (){
- Try {
- Keystore truststore = keystore. getinstance (keystore. getdefaulttype ());
- Truststore. Load (null, null );
- Sslsocketfactory Sf = new sslsocketfactoryex (truststore );
- SF. sethostnameverifier (sslsocketfactory. allow_all_hostname_verifier );
- Httpparams Params = new basichttpparams ();
- Httpprotocolparams. setversion (Params, httpversion. http_1_1 );
- Httpprotocolparams. setcontentcharset (Params, HTTP. utf_8 );
- Schemeregistry registry = new schemeregistry ();
- Registry. Register (New Scheme ("HTTP", plainsocketfactory. getsocketfactory (), 80 ));
- Registry. Register (New Scheme ("HTTPS", SF, 443 ));
- Clientconnectionmanager CCM = new threadsafeclientconnmanager (Params, registry );
- Return new defaulthttpclient (CCM, Params );
- } Catch (exception e ){
- Return new defaulthttpclient ();
- }
- }
Copy code
Now, you can use this httpclient to request data !!!!! Good