互联网服务WAS

关于was的ssl通信问题(求各路大神指点)

本人小菜,刚刚接触webspere,现在碰到了一个棘手的问题,希望各路高手和大神都给小弟指点迷津事情是这样的,今年一月份给客户开发了一个微招聘系统,当时没考虑服务器的环境问题,直接用的是
jdk1.6 和eclipse开发 ,服务器容器为tomcat7.0
到了2月末开发的事情已经相关完了
在发布的时候碰到了一个ssl通信的问题
直接贴代码 如下图


这段代码有两个作用:1为服务号创建自定义菜单时候获取token
                            2为通过微信高级接口获取 用户的openid然后再重定向跳转

在本地环境下 是好用的,没有任何问题
但是 发布到was7.0上  就会报错 并且提示[img]file:///C:UsersAdministratorAppDataRoamingTencentUsers393247646QQWinTempRichOleP_([C_OS$C0@TELA1V}4})N.png[/img][img]file:///C:UsersAdministratorAppDataRoamingTencentUsers393247646QQWinTempRichOleP_([C_OS$C0@TELA1V}4})N.png[/img] java.security.NoSuchProviderException: no such provider: SunJSSE
之前也在网上查了一些资料,ssl设置之类等等
看的也是一头雾水
请各路神仙详细给小弟解答一下  不胜感激
参与21

19同行回答

winzirwinzirit技术咨询顾问IBM
很遗憾地告诉你,WAS用的是IBM JDK,在WAS上只能用IBM JSSE Provider,不支持Sun (Oracle)的 JSSE,请参考 http://www-01.ibm.com/support/kn ... 2Docs/ibmjsse2.html显示全部
很遗憾地告诉你,WAS用的是IBM JDK,在WAS上只能用IBM JSSE Provider,不支持Sun (Oracle)的 JSSE,请参考 http://www-01.ibm.com/support/kn ... 2Docs/ibmjsse2.html收起
互联网服务 · 2015-03-03
浏览566
小韩飞刀小韩飞刀项目经理大连聚合力
以上代码 全是 是 ibmjsse.jar反编译后的 java代码显示全部
以上代码 全是 是 ibmjsse.jar反编译后的 java代码收起
互联网服务 · 2015-03-03
浏览599
小韩飞刀小韩飞刀项目经理大连聚合力
回复 16# winzir 证书 是 读取到了在 连接的时候崩掉了刚才 页面没刷新  不知道 大牛给 我回复了但是 我又在看源码文件  直接上源码: {    String str1 = System.getProperty("https.proxyHost");    if ((str1 == null) || (""...显示全部
回复 16# winzir


证书 是 读取到了

在 连接的时候崩掉了
刚才 页面没刷新  
不知道 大牛给 我回复了

但是 我又在看源码文件  直接上源码:
{
    String str1 = System.getProperty("https.proxyHost");
    if ((str1 == null) || ("".equals(str1)))
    {
      d = null;
      c = 80;
    }
    else
    {
      d = str1;
      c = Integer.getInteger("https.proxyPort", 80).intValue();
    }
    String str2 = System.getProperty("https.cipherSuites");
    Object localObject2;
    if ((str2 == null) || ("".equals(str2)))
    {
      i = null;
    }

这些 https.proxyHost ,https.proxyPort 都是怎么配置的
初步怀疑是 这些 属性没有配置的问题收起
互联网服务 · 2015-03-03
浏览599
小韩飞刀小韩飞刀项目经理大连聚合力
回复 16# winzir 证书 是 读取到了在 连接的时候崩掉了刚才 页面没刷新  不知道 大牛给 我回复了显示全部
回复 16# winzir


证书 是 读取到了

在 连接的时候崩掉了
刚才 页面没刷新  
不知道 大牛给 我回复了收起
互联网服务 · 2015-03-03
浏览599
小韩飞刀小韩飞刀项目经理大连聚合力
源码中 执行     String str1 = System.getProperty("https.proxyHost");的时候蹦掉了怀疑是 webspere 需要配置 https.proxyHost各路大仙  上哪去了?谁知道啊?显示全部
源码中 执行     String str1 = System.getProperty("https.proxyHost");的时候蹦掉了

怀疑是 webspere 需要配置 https.proxyHost

各路大仙  上哪去了?
谁知道啊?收起
互联网服务 · 2015-03-03
浏览593
winzirwinzirit技术咨询顾问IBM
你的这行代码 File localFile = new File(System.getProperty("java.home") + str + "lib" + str + "security" + str + "cacerts");  读不到 java\lib\security\cacerts  证书库文件?显示全部
你的这行代码 File localFile = new File(System.getProperty("java.home") + str + "lib" + str + "security" + str + "cacerts");  读不到 java\lib\security\cacerts  证书库文件?收起
互联网服务 · 2015-03-03
浏览577
小韩飞刀小韩飞刀项目经理大连聚合力
ibm jdk取本地证书源码如下:protected void engineInit(KeyStore paramKeyStore)    throws KeyStoreException  {    if (paramKeyStore == null)    {      String str = File.separator;   &nb...显示全部
ibm jdk
取本地证书源码如下:
protected void engineInit(KeyStore paramKeyStore)
    throws KeyStoreException
  {
    if (paramKeyStore == null)
    {
      String str = File.separator;
      try
      {
        File localFile = new File(System.getProperty("java.home") + str + "lib" + str + "security" + str + "cacerts");
        if (!localFile.exists()) {
          return;
        }
        FileInputStream localFileInputStream = new FileInputStream(localFile);
        paramKeyStore = KeyStore.getInstance("jks");
        paramKeyStore.load(localFileInputStream, null);
        localFileInputStream.close();
      }
      catch (Exception localException) {}
    }
    this.trustManager = new X509TrustManagerImpl(paramKeyStore);
  }

我在初始化的时候给 keystore赋值为null  在内部 会按照这个来解析的

但是 为什么还是 握手失败??
这是什么情况?收起
互联网服务 · 2015-03-03
浏览576
winzirwinzirit技术咨询顾问IBM
关于KeyStore和TrustStore的问题,WAS提供了几种不同的策略选择,优先级最高的是直接在代码里指定。比如System.setProperty("com.ibm.ssl.keyStoreType","PKCS12");System.setProperty("com.ibm.ssl.keyStore","C:/etc/key.p12");System.setProperty("com.ibm.ssl.keyStoreP...显示全部
关于KeyStore和TrustStore的问题,WAS提供了几种不同的策略选择,优先级最高的是直接在代码里指定。比如

System.setProperty("com.ibm.ssl.keyStoreType","PKCS12");
System.setProperty("com.ibm.ssl.keyStore","C:/etc/key.p12");
System.setProperty("com.ibm.ssl.keyStorePassword","WebAS");
System.setProperty("com.ibm.ssl.trustStoreType","PKCS12");
System.setProperty("com.ibm.ssl.trustStore","C:/etc/trust.p12");
System.setProperty("com.ibm.ssl.trustStorePassword","WebAS");

Sun JDK 默认用的是 java\jre\lib\security\cacerts 那个key store,里面已经包含了主要第三方CA的签署者证书,你也可以选择cacerts放你的证书,当然,也可以自己单独创建证书库,也可以使用WAS自己的证书库。收起
互联网服务 · 2015-03-03
浏览588
winzirwinzirit技术咨询顾问IBM
几个关键的对象你可以参考这个文件,WAS_HOME\java\jre\lib\security\java.security,里面定义了这几个对象,SecurityProvider, KeyManagerFactory, TrustManagerFactory, SocketFactory,我没有写过应用层面的实现代码,但在WAS上使用SSL,就要按照IBM JDK (IBM JCE, IBM JSSE)的规...显示全部
几个关键的对象你可以参考这个文件,WAS_HOME\java\jre\lib\security\java.security,里面定义了这几个对象,SecurityProvider, KeyManagerFactory, TrustManagerFactory, SocketFactory,我没有写过应用层面的实现代码,但在WAS上使用SSL,就要按照IBM JDK (IBM JCE, IBM JSSE)的规范来写,我的理解是如果你不在代码里指定,WAS会用那个文件里指定的作为默认值,如果你在代码里指定了,就会优先用代码里指定的值,如果不是IBM JDK支持的,就会出问题。收起
互联网服务 · 2015-03-03
浏览608
小韩飞刀小韩飞刀项目经理大连聚合力
代码改成这样:                        TrustManagerFactory localTrustManagerFactory = TrustManagerFactory.getInstance("IbmX509");                  &...显示全部
代码改成这样:
                        TrustManagerFactory localTrustManagerFactory = TrustManagerFactory.getInstance("IbmX509");
                        KeyStore keyStore = null;
                        localTrustManagerFactory.init(keyStore);
                        SSLContext sslContext=SSLContext.getInstance("SSL");
                        sslContext.init(null, localTrustManagerFactory.getTrustManagers(), new java.security.SecureRandom());
                        SSLSocketFactory ssf=sslContext.getSocketFactory();


已访问  直接崩掉
log显示 是 握手失败  也就是在connect的时候崩掉的

感觉是 keyStore的问题
初始化的时候 给设置成null了收起
互联网服务 · 2015-03-03
浏览595

提问者

小韩飞刀
项目经理大连聚合力

相关问题

相关资料

相关文章

问题状态

  • 发布时间:2015-03-03
  • 关注会员:1 人
  • 问题浏览:6927
  • 最近回答:2015-03-03
  • X社区推广