首页 > 解决方案 > https调用在直接从java调用时工作,但不能从oracle 12c内部工作

问题描述

错误是:sun.security.validator.ValidatorException:PKIX 路径验证失败:java.security.cert.CertPathValidatorException:时间戳检查失败

使用的代码是:

create or replace and compile java source named sendsms as
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class HttpsCall {
public static void main(String[] args) throws Exception {
        
String httpsURL = "https://www.jawalbsms.ws/api.php/sendsms?user=abc&pass=xyz&to=9665555555555&message=good morning&sender=abc";
        
 URL myUrl = new URL(httpsURL);
 HttpsURLConnection conn = (HttpsURLConnection) myUrl.openConnection();
 InputStream is = conn.getInputStream();
 InputStreamReader isr = new InputStreamReader(is);
 BufferedReader br = new BufferedReader(isr);

 String inputLine;

 while ((inputLine = br.readLine()) != null) {
       System.out.println(inputLine);
        }

    br.close();

} }

标签: javahttpsoracle12c

解决方案


通过在代码中添加以下行来解决,现在可以在 oracle 12c 上正常工作

 SSLContext context = SSLContext.getInstance("TLSv1.2");
 TrustManager[] trustManager = new TrustManager[] {
 new X509TrustManager() {
 public X509Certificate[] getAcceptedIssuers() {
        return new X509Certificate[0];
      }
 public void checkClientTrusted(X509Certificate[] certificate, String str) {}
             public void checkServerTrusted(X509Certificate[] certificate, String      str) {}
    }
  };
context.init(null, trustManager, new SecureRandom());


HttpsURLConnection.setDefaultSSLSocketFactory(context.getSocketFactory());

javax.net.ssl.HttpsURLConnection.setDefaultHostnameVerifier(
new HostnameVerifier(){
public boolean verify(String hostname, SSLSession session) {   
       return true;   
  }
    });

推荐阅读