我有一个Java程序,该程序连接到一个服务器并与该服务器交互,并执行(打印“hello world”)简单的任务。
我的Java程序是用于与VMware ESXi服务器进行交互的,以下是代码:
ServiceInstance si = new ServiceInstance(new URL("https://10.100.13.36/sdk"), "root", "teamw0rk", true)
true参数表示忽略证书为真。
尽管这是与VMware进行的交互,但问题纯粹是证书问题。因为当我将忽略证书设置为false时,从库文件中得到了一般的证书期望。
程序如下所示。
我的Java程序是用于与VMware ESXi服务器进行交互的,以下是代码:
ServiceInstance si = new ServiceInstance(new URL("https://10.100.13.36/sdk"), "root", "teamw0rk", 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参数中。”
请澄清我的疑惑并为此提供一些说明。
谢谢。