Java 通过HTTPS的RESTful Web服务

Java 通过HTTPS的RESTful Web服务,java,rest,web-services,tomcat,ssl,Java,Rest,Web Services,Tomcat,Ssl,我已经通过Let's Encrypt extension在Plesk中为我的域安装了SSL证书。HTTPS的默认端口为443。它很好用 现在我想在Tomcat7上安装证书。我按照这个答案创建了一个JKS密钥库(来自Plesk中使用的同一个Let's Encrypt证书),并在不同端口上配置Tomcat的连接器445。 当我在浏览器上打开tomcat页面时(https://mywebsite.com:445)页面是安全的 问题是当我试图用下面的java客户机连接到它时 public static

我已经通过Let's Encrypt extension在Plesk中为我的域安装了SSL证书。HTTPS的默认端口为443。它很好用

现在我想在Tomcat7上安装证书。我按照这个答案创建了一个JKS密钥库(来自Plesk中使用的同一个Let's Encrypt证书),并在不同端口上配置Tomcat的连接器445。 当我在浏览器上打开tomcat页面时(
https://mywebsite.com:445
)页面是安全的

问题是当我试图用下面的java客户机连接到它时

public static void main(String[] args) {

  try {

    URL url = new URL("https://mywebsite.com:445");
    HttpsURLConnection  conn = (HttpsURLConnection ) url.openConnection();
    conn.setRequestMethod("GET");
    conn.setRequestProperty("Accept", "text/plain");

    if (conn.getResponseCode() != 200) {
        throw new RuntimeException("Failed : HTTP error code : "
                + conn.getResponseCode());
    }

    BufferedReader br = new BufferedReader(new InputStreamReader(
        (conn.getInputStream())));

    String output;
    System.out.println("Output from Server .... \n");
    while ((output = br.readLine()) != null) {
        System.out.println(output);
    }

    conn.disconnect();

  } catch (MalformedURLException e) {

    e.printStackTrace();

  } catch (IOException e) {

    e.printStackTrace();

  }

}
结果是一个异常(但是如果我尝试(
https://mywebsite.com:443
)它可以工作)

我需要通过HTTPS访问RESTful Web服务的资源。 请帮帮我。
提前感谢。

从JAVA\u主页备份您的cacert:

$cp $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/jssecacerts
然后从您的服务导入证书

$keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/jssecacerts -storepass
changeit -noprompt -alias {cert alias} -file {cert file}

然后重新启动应用程序。

从JAVA\u主页备份您的cacert:

$cp $JAVA_HOME/jre/lib/security/cacerts $JAVA_HOME/jre/lib/security/jssecacerts
然后从您的服务导入证书

$keytool -import -trustcacerts -keystore $JAVA_HOME/jre/lib/security/jssecacerts -storepass
changeit -noprompt -alias {cert alias} -file {cert file}

然后重新启动应用程序。

Java没有所需的证书。

默认情况下,Java附带了可信任的证书列表。它位于
JAVA_HOME/jre/lib/security/cacerts
文件中

在您的情况下,由于这是一个新的/自签名的证书,您需要告诉Java它是可信的。您可以通过将证书添加到
cacerts
文件来执行此操作:

keytool -import -trustcacerts -alias <unique alias name>-file <certificate file path> -keystore <cacerts file path>
keytool-import-trustcacerts-alias-file-keystore

Java没有所需的证书。

默认情况下,Java附带了可信任的证书列表。它位于
JAVA_HOME/jre/lib/security/cacerts
文件中

在您的情况下,由于这是一个新的/自签名的证书,您需要告诉Java它是可信的。您可以通过将证书添加到
cacerts
文件来执行此操作:

keytool -import -trustcacerts -alias <unique alias name>-file <certificate file path> -keystore <cacerts file path>
keytool-import-trustcacerts-alias-file-keystore

非常感谢。。。它起作用了。。。最后一个问题:如果我想使用另一种类型的客户端(如Android、IOS、智能设备),我应该先导入我的服务证书吗?是的,我认为SSL证书是自签名的,这就是当您导入证书时会出现PKIX错误的方式,java检查为受信任的证书。非常感谢。。。它起作用了。。。最后一个问题:如果我想使用另一种类型的客户端(如Android、IOS、智能设备),我应该先导入我的服务证书吗?是的,我认为SSL证书是自签名的,这就是当您导入证书时,会出现PKIX错误的方式,java检查为可信证书。非常感谢您的回答!!最后一个问题:如果我想使用其他类型的客户端(如Android、IOS、智能设备),我应该先导入我的服务证书吗?非常感谢您的回答!!最后一个问题:如果我想使用另一种类型的客户端(如Android、IOS、智能设备),我应该先导入我的服务证书吗?