Java 通过HTTPS的RESTful Web服务
我已经通过Let's Encrypt extension在Plesk中为我的域安装了SSL证书。HTTPS的默认端口为443。它很好用 现在我想在Tomcat7上安装证书。我按照这个答案创建了一个JKS密钥库(来自Plesk中使用的同一个Let's Encrypt证书),并在不同端口上配置Tomcat的连接器445。 当我在浏览器上打开tomcat页面时(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
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、智能设备),我应该先导入我的服务证书吗?