[英]self signed certificate for java program
我有一个java程序连接到一个服务器并与该服务器交互,并做(说你好世界)简单的任务。
我的java程序是与vmware esxi服务器进行交互。 使用以下代码。
ServiceInstance si = new ServiceInstance(新URL(“https://10.100.13.36/sdk”),“root”,“teamw0rk”,true)
true参数表示忽略证书为true。
即使它是一个vmware交互库,它纯粹是一个证书问题。因为当我把false放入忽略证书。 我从库文件中获得了一般证书期望。
该计划如下。
package com.vmware.vim25.mo.samples;
import java.net.URL;
import com.vmware.vim25.*;
import com.vmware.vim25.mo.*;
public class HelloVM
{
public static void main(String[] args) throws Exception
{
long start = System.currentTimeMillis();
ServiceInstance si = new ServiceInstance(new URL("https://10.100.13.36/sdk"), "root", "teamw0rk", false);
long end = System.currentTimeMillis();
System.out.println("time taken:" + (end-start));
Folder rootFolder = si.getRootFolder();
String name = rootFolder.getName();
System.out.println("root:" + name);
ManagedEntity[] mes = new InventoryNavigator(rootFolder).searchManagedEntities("VirtualMachine");
if(mes==null || mes.length ==0)
{
return;
}
VirtualMachine vm = (VirtualMachine) mes[0];
VirtualMachineConfigInfo vminfo = vm.getConfig();
VirtualMachineCapability vmc = vm.getCapability();
vm.getResourcePool();
System.out.println("Hello " + vm.getName());
System.out.println("GuestOS: " + vminfo.getGuestFullName());
System.out.println("Multiple snapshot supported: " + vmc.isMultipleSnapshotsSupported());
si.getServerConnection().logout();
}
}
该错误与期望ssl证书有关。
Exception in thread "main" java.rmi.RemoteException: VI SDK invoke exception:javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No subject alternative names matching IP address 10.100.13.36 found
at com.vmware.vim25.ws.WSClient.invoke(WSClient.java:182)
at com.vmware.vim25.ws.WSClient.invoke(WSClient.java:124)
at com.vmware.vim25.ws.VimStub.retrieveServiceContent(VimStub.java:1521)
at com.vmware.vim25.mo.ServiceInstance.<init>(ServiceInstance.java:85)
at com.vmware.vim25.mo.ServiceInstance.<init>(ServiceInstance.java:69)
at com.vmware.vim25.mo.samples.HelloVM.main(HelloVM.java:16)
我确认程序错误与vmware无关,而且与证书有关。
我所做的第一步是使用以下命令创建jks文件
c:/java/jre/bin>keytool -genkey -keyalg RSA -alias selfsigned -keystore keystore.jks -storepass password -validity 360 -keysize 2048
它在bin文件夹中创建keystore.jks。
我必须了解如何在java程序中引用这个keystore.jks。(我对此知之甚少...抱歉)
如何生成证书以及导入证书和导出证书的含义。
在我的情况下,我需要导入或导出..
最初我发布了一个人的问题..
他回答说:“在高级别,您需要将服务器证书放入密钥库并将密钥库包含在JVM参数中”
请澄清我的疑虑并对此有所启发..
谢谢。
您收到的错误是抱怨URL(10.100.13.36)中的主机名与服务器的SSL证书中包含的任何服务器名称都不匹配。
CertificateException:找不到与IP地址10.100.13.36匹配的主题备用名称
您可以在URL请求中使用实际的服务器名称重试吗? 您可能需要使用服务器的完全限定名称。 因为您需要匹配服务器正在使用的SSL证书中包含的服务器的名称。
您可以使用curl命令查看服务器的证书,例如:
curl -v https://10.100.13.36/sdk
以下是Microsoft的SSL证书包含的内容:
C:\>curl -v https://www.microsoft.com
* About to connect() to www.microsoft.com port 443 (#0)
* Trying 64.4.11.20... connected
* Connected to www.microsoft.com (64.4.11.20) port 443 (#0)
* successfully set certificate verify locations:
* CAfile: c:\tpf$\bin\curl-ca-bundle.crt
CApath: none
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using RC4-MD5
* Server certificate:
* subject: C=US; ST=WA; L=Redmond; O=Microsoft Corporation; OU=MSCOM; CN=
www.microsoft.com
* start date: 2012-03-29 19:29:53 GMT
* expire date: 2014-03-29 19:29:53 GMT
* common name: www.microsoft.com (matched)
* issuer: DC=com; DC=microsoft; DC=corp; DC=redmond; CN=Microsoft Secure
Server Authority
* SSL certificate verify ok.
> GET / HTTP/1.1
证书由Tomcat使用,而不是您的客户端。 请参阅Tomcat SSL文档。
生成证书时,请尝试添加-dname CN=10.100.13.36
。 我认为您甚至不需要使用主题备用名称。 公用名(CN)应该等于您在要连接的URL中使用的域名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.