我们连某银行系统 :
测试服务器可以把报文发过去,正式服务器就是不行。
报这个错
 02 21:15:00 CST 2011
java.net.SocketException: Unexpected end of file from server
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:769)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
        at sun.net.www.http.HttpClient.parseHTTPHeader(HttpClient.java:766)
        at sun.net.www.http.HttpClient.parseHTTP(HttpClient.java:632)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1072)
        at java.net.HttpURLConnection.getResponseCode(HttpURLConnection.java:373)
        at sun.net.www.protocol.https.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:318)测试可以 过去的报文对方有证书主题
但是线上的过去没有证书主题以下分别是他们抓的成功的和失败的包
成功的报文:
[进程6775][16:06:54]SSL connection using RC4-MD5
[进程6775][16:06:54]Client certificate:
[进程6775][16:06:54]Client certificate: subject: /C=CN/O=PAIC/OU=EE_SIGNING/CN=EXV_BIS_IFRONT_YIHAODIAN_003_PRD
[进程6775][16:06:54]Client certificate: CN: PRD
[进程6775][16:06:54]Client certificate: issuer: /C=CN/O=PAIC/CN=PAIC CA
[进程6775][16:06:54]transmitsvr:证书主题 CN =[PRD]
[进程6775][16:06:54]转换为大写的证书主题[_PRD]!
[进程6775][16:06:54]id=[000021] ip=[PRD] sys_code=[LPMS01] port_num=[xxxx] timeout=[30] head_len=[0] ms
g_pos=[0] region_code=[] head_type=[HTTPS] max_proc=[0]
[进程6775][16:06:54]transmitsvr:获取节点transactiontype=[COMMON]
[进程6775][16:06:54]RecvDataFromSocket() ip_table_head_type=[HTTPS]
[进程6775][16:06:54]SSL开始读取数据....
[进程6775][16:06:54]SSL获取HTTP回复头成功![POST /invoke/receive HTTP/1.1
Content-Type: text/xml
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.6.0_10-rc2
Connection: keep-alive
Content-Length: 678]
[进程6775][16:06:54]SSL获取HTTP回复内容长度为[278]
</feedba
ckInfoList></request>]失败的报文:[进程6770][15:15:01]SSL connection using RC4-MD5
[进程6770][15:15:01]Client does not have certificate.
[进程6770][15:15:01]transmitsvr:证书主题 CN =[N]
[进程6770][15:15:01]transmitsvr:获取节点transactiontype=[COMMON]
[进程6770][15:15:01]RecvDataFromSocket() ip_table_head_type=[HTTPS]
[进程6770][15:15:01]SSL开始读取数据....
[进程6770][15:15:01]SSL获取HTTP回复头成功![POST /invoke/receive HTTP/1.1
Content-Type: text/xml
Cache-Control: no-cache
Pragma: no-cache
User-Agent: Java/1.6.0_24
Host: eairiis-prddmz.paic.com.cn
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive
Content-Length: 641]
[进程6770][15:15:01]SSL获取HTTP回复内容长度为[274]
对方给的 是我们生产没有把主题传过去,但是我们测试生产都一样的代码 部署目录 环境 请高人指点 谢了 

解决方案 »

  1.   

    用的证书是2个 一个pfx一个jks现在生产环境过去包 就是 没有证书主题
      

  2.   

    测试环境的证书什么格式的 生产环境证书什么格式的
    测试环境的jdk是sun的还是IBM的
    生产上呢
    你可以看一下生产上的日志 
    加载证书的时候有没有错误日志
      

  3.   


    测试生产都是 sun jdk 64的 版本号相差很小 都是1.6.0.××的,生产测试都一样2个文件一个jks,一个pfx我加载证书 是 System。setproperty(keystorepath);
    System。setproperty(truststorepath);然后 在getproperty出来我看到日志是没有问题的还有什么其他办法可以看 生产库 证书 是否加载 正常???
      

  4.   

    我不知道你为什么要放到properties里面,如果证书加载成功了,你打印一下keystore中的证书信息看看
      

  5.   

    把 URLConnection 强转成 javax.net.ssl.HttpsURLConnection 这里有些方法可以看到本地发送出去的证书链。这个异常应该是 HTTPS 响应报文第一行的数据就有问题,状态行不是以 HTTP/1. 开头的
      

  6.   

    java.net.SocketException: Unexpected end of file from server
    看错误提示,返回的信息格式匹配不上,解析出错了。会不会两个系统编码上有什么差异?
      

  7.   

    已经找到问题了
    谢谢各位  可能 出口ip 被过滤了什么东西 或者对方 禁止了我的ip 什么的 现在 原因还未知