我有一个 Java 程序,它连接到一台服务器并与该服务器交互并执行(打个招呼世界)简单的任务。
我的 java 程序是与 vmware esxi 服务器交互。使用以下代码。
ServiceInstance si = new ServiceInstance(new 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 参数中”
请澄清我的疑问并对此有所了解。
谢谢你。