1楼:
你那个 sslsocketfactory(ks) 是自己的类?
你有用过 keymanager.init (...)? 和 trustmanager.init(...) ?
想要在连接建立过程上交互式的弹出确认对话框来的话需要我们自己提供一个 keymanager 和 trustmanager 的实现类,这有点复杂,你可以看一个 sun 的 x509keymanager 是怎么做的,默认地情况下它是从自动搜索匹配的 subject ,我们需要用自己提供的方式弹出确认的过程还不是全自动,另外一个账户可能有多个数字证书,比如支付宝我们就有多个签发时间不一样的数字证书,在连接建立时 ie 会提示我们选择其中的一个来使用,银行的 u 盾在安装多张数字证书时也会提示我们选择其中一个对应到你正在使用的银行卡号的那张证书。
java的httpclient如何去支持无证书访问https
2楼:匿名用户
不用httpclient, 用jdk的api就可以写
importjava.io.bytearrayoutputstream;
importjava.io.inputstream;
importjava.***.httpurlconnection;
importjava.***.url;
importjavax.***.ssl.hostnameverifier;
importjavax.***.ssl.httpsurlconnection;
importjavax.***.ssl.sslsession;
importjavax.***.ssl.trustmanager;
importjavax.***.ssl.x509trustmanager;
publicclasshttputil
publicstaticstringgettourl(stringurl,stringcharset)throwsexception
};javax.***.ssl.trustmanagertrustallcerts=newjavax.***.ssl.trustmanager[1];
javax.***.ssl.trustmanagertm=newmym();
trustallcerts[0]=tm;
javax.***.ssl.sslcontextsc=javax.***.ssl.sslcontext.getinstance("ssl");
sc.init(null,trustallcerts,null);
javax.***.ssl.httpsurlconnection.setdefaultsslsocketfactory(sc.getsocketfactory());
httpsurlconnection.setdefaulthostnameverifier(hv);
httpurlconnectionconnection=(httpurlconnection)newurl(url).openconnection();
connection.setdoinput(true);
connection.setrequestmethod("get");
connection.setusecaches(false);
connection.setinstancefollowredirects(true);
connection.connect();
inputstreamresponse=connection.getinputstream();
bytearrayoutputstreamresult=newbytearrayoutputstream();
bytedata=newbyte[10240];
intcount=-1;
while(-1!=(count=response.read(data,0,data.length)))
connection.disconnect();
returnnewstring(result.tobytearray(),charset);
}staticclassmymimplementstrustmanager,x509trustmanager
publicvoidcheckservertrusted(java.security.cert.
x509certificatechain,stringauthtype)throwsjava.security.cert.
certificateexception
publicjava.security.cert.x509certificategetacceptedissuers()}}
3楼:匿名用户
在服务器站点设置里,将ssl设置为忽略。
客户端怎么使用httpclient向https服务器发送数据
4楼:匿名用户
客户端向服务器发送数据时,份两种情况,ssl单向验证和ssl双向验证
1.ssl单向验证时
**如下:
java**
import java.io.ioexception;
import java.util.hashmap;
import java.util.map;
import ***.apache.***mons.httpclient.httpclient;
import ***.apache.***mons.httpclient.httpexception;
import ***.apache.***mons.httpclient.httpstatus;
import ***.apache.***mons.httpclient.namevaluepair;
import ***.apache.***mons.httpclient.methods.postmethod;
import ***.apache.***mons.httpclient.params.httpclientparams;
import ***.apache.***mons.httpclient.params.httpmethodparams;
import ***.apache.***mons.logging.log;
import ***.apache.***mons.logging.logfactory;
public class clientsenddata
public string senddata(string data) catch (exception e)
return receiveddata;
} public static string send(string url, mapparam**ap)
postmethod.setrequestbody(datas);
} httpclientparams httparams = new httpclientparams();
httparams.setsotimeout(60000);
postmethod.setparams(httparams);
try else
} catch (httpexception e) catch (ioexception e) finally
} return result;
} public static void main(string args)
} 可能出现的异常
1.java.***.connectexception: connection refused: connect
服务器没有启动
2 .javax.***.
ssl.sslhandshakeexception: sun.
security.validator.validatorexception:
pkix path building failed
服务端的证书是不可信的。解决办法见这篇文章 http://zhuyuehua.iteye.***/blog/1102347
3.java.***.socketexception: software caused connection abort: recv failed
这是由于服务端配置的是ssl双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。
4.***.apache.***mons.httpclient.nohttpresponseexception
这一般是服务端防火墙的原因。拦截了客户端请求。
另外,当服务端负载过重时,也会出现此问题。
5.javax.***.ssl.sslhandshakeexception: remote host closed connection during handshake
这是由于服务端配置的是ssl双向认证,而客户端发送数据是按照服务器是单向认证时发送的,即没有将客户端证书信息一起发送给服务端。服务端验证客户端证书时,发现客户端没有证书,然后就断开了握手连接。
2.ssl双向验证时
双向验证时,暂时不知道如何用httpclient发送数据,如需要双向验证时发送数据,参考我另外的文章。另外,有知道httpclient如何在双向验证时发送数据的,恳请指教。
httpclient 怎么忽略证书验证访问https
5楼:一骑当后
您好,我来为您解答:
自定义一个sslsocketfactory,忽略证书的验证。
如果我的回答没能帮助您,请继续追问。
6楼:匿名用户
我来为您解答:
自定义一个sslsocketfactory,忽略证书的验证。
用java做一个httpclient 发送https 的get请求,需要证书验证的那种,求大神指点一下!
7楼:匿名用户
你那个 sslsocketfactory(ks) 是自己的类?
你有用过 keymanager.init (...)? 和 trustmanager.init(...) ?
想要在连接建立过程上交互式的弹出确认对话框来的话需要我们自己提供一个 keymanager 和 trustmanager 的实现类,这有点复杂,你可以看一个 sun 的 x509keymanager 是怎么做的,默认地情况下它是从自动搜索匹配的 subject ,我们需要用自己提供的方式弹出确认的过程还不是全自动,另外一个账户可能有多个数字证书,比如支付宝我们就有多个签发时间不一样的数字证书,在连接建立时 ie 会提示我们选择其中的一个来使用,银行的 u 盾在安装多张数字证书时也会提示我们选择其中一个对应到你正在使用的银行卡号的那张证书。
如何配置tomcat的https证书
1楼 匿名用户 1 为服务器生成证书 运行 控制台,进入 java home bin目录,使用如下命令进入目录 cd c program files java jdk1 6 0 11 bin 使用keytool为tomcat生成证书,假定目标机器的域名是 localhost ,keystore文件存...
如何给tomcat7配置https协议
1楼 走向幸福的道 https统一端口是443,设置的时候注意防火墙是否允许443,如果用cdn的,请在cdn中配置。 如何配置https访问tomcat 2楼 匿名用户 tomcat 安装ssl证书 https gw ssl 109 html tomcat 自动跳 转到https https gw...
openssl访问https,怎么获取证书
1楼 匿名用户 证书可以去淘一个https证书,然后按照签发要求安装就可以了。 2楼 匿名用户 答 如果 是https的,必须使用openssl建立安全通道,也就是必须要用证书。 openssl访问https,怎么获取证书 3楼 匿名用户 证书必须要找ca签发,也可以自己淘1个好的。 openssl...