2014-01-16 75 views
1

我正在使用vmware API。通過使用這個API,我可以獲得ESX設備的信息。現在我想要使用此API獲取有關vcenter的信息,但會獲得異常「Java.rmi.remoteException:VI SDK Invoke異常:javax.net.ssl.SSLHandShakeException:java.security。」如何使用java訪問vcenter時解決證書錯誤?

下面是一個代碼:

public void realesx(){ 
System.out.println("Running ESX Realtime for host ..."+host); 
JSONObject esxcmdout = new JSONObject(); 
String url = "https://" + host + "/sdk/vimService"; 
try { 
ServiceInstance si = new ServiceInstance(new URL(url), user, pass,true); 
System.out.println("host :"+host+"---"+si.getAboutInfo().getFullName()); 

System.out.println(" Version is .. " +si.getAboutInfo().version); 
System.out.println(" os type is .. " +si.getAboutInfo().osType); 
System.out.println("Vendor is .. " + si.getAboutInfo().vendor); 
System.out.println("name is" + si.getAboutInfo().name); 
try{ 
esxcmdout.put("vmWayerVersion", si.getAboutInfo().version); 
esxcmdout.put("vmWayerOSType", si.getAboutInfo().osType); 
esxcmdout.put("vmWayerVendor", si.getAboutInfo().vendor); 
esxcmdout.put("vmWayerName", si.getpublic void realesx(){ 
System.out.println("Running ESX Realtime for host ..."+host); 
JSONObject esxcmdout = new JSONObject(); 
String url = "https://" + host + "/sdk/vimService"; 
try { 
ServiceInstance si = new ServiceInstance(new URL(url), user, pass,true); 
System.out.println("host :"+host+"---"+si.getAboutInfo().getFullName()); 

System.out.println(" Version is .. " +si.getAboutInfo().version); 
System.out.println(" os type is .. " +si.getAboutInfo().osType); 
System.out.println("Vendor is .. " + si.getAboutInfo().vendor); 
System.out.println("name is" + si.getAboutInfo().name); 
try{ 
esxcmdout.put("vmWayerVersion", si.getAboutInfo().version); 
esxcmdout.put("vmWayerOSType", si.getAboutInfo().osType); 
esxcmdout.put("vmWayerVendor", si.getAboutInfo().vendor); 
esxcmdout.put("vmWayerName", si.getAboutInfo().name); 
} 
catch (Exception e){ 
e.printStackTrace(); 
} 

ManagedEntity[] managedEntities = new InventoryNavigator(
si.getRootFolder()).searchManagedEntities("VirtualMachine"); 
ManagedEntity[] hostmanagedEntities = new InventoryNavigator(
     si.getRootFolder()).searchManagedEntities("HostSystem"); 

for (ManagedEntity hostmanagedEntity : hostmanagedEntities) { 
HostSystem hostsys = (HostSystem) hostmanagedEntity; 
String ESXhostname = hostsys.getName(); 
//System.out.println("main system version is .. " + hostsys.getConfig()); 
HostListSummary hls = hostsys.getSummary(); 
    HostHardwareSummary hosthwi = hls.getHardware(); 
    HostListSummaryQuickStats hqs = hls.getQuickStats(); 
    Datastore[] HDS = hostsys.getDatastores(); 
    StringBuilder DS = new StringBuilder(); 
    for (int i=0;i <HDS.length;i++){ 
     DatastoreSummary dsm =HDS[i].getSummary(); 

     DS.append(dsm.name+":"+dsm.capacity+":"+dsm.freeSpace+"-"); 
     } 

int MEM=hqs.overallMemoryUsage; 
int UPT=hqs.getUptime(); 
Integer CPU=hqs.getOverallCpuUsage(); 

String esxkey = "ESXRealInfo"; 
String esxvalue = "ESXhostname-" + ESXhostname 
    + ";CPU Usage-" + CPU + ";MEM Usage-" 
    + MEM + ";UPTIME-" + UPT+"; Datastores -"+DS; 
try { 
esxcmdout.put(esxkey, esxvalue); 
} catch (JSONException e) { 
// TODO Auto-generated catch block 
e.printStackTrace(); 
} 
} 

for (int i = 0; i < managedEntities.length; i++) { 
    VirtualMachine vm = (VirtualMachine) managedEntities[i]; 
    String vmName = vm.getName(); 

    String vmIP = vm.getGuest().getIpAddress(); 
    VirtualMachineConfigInfo config = vm.getConfig(); 
    VirtualHardware hw = config.getHardware(); 
    String vmVersion = config.version; 
    System.out.println("######### vm version is ###### ... "+ vmVersion); 
    int vmCPU = hw.getNumCPU(); 
    int vmMem = hw.getMemoryMB(); 
    String vmkey = "vm" + i; 
     String vmvalues = "Name-" + vmName + ";IP-" + vmIP + ";vmCPU-" 
      + vmCPU + ";vmMem-" + vmMem + ";vmVersion-" + vmVersion; 
      System.out.println("string to write is... "+vmvalues); 
    try { 
     esxcmdout.put(vmkey, vmvalues); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    } 
    si.getServerConnection().logout(); 
    } 

    catch (InvalidProperty e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (RuntimeFault e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     runMT.httpput(runtype, host, vmwtype, esxcmdout); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

}AboutInfo().name); 
     } 
     catch (Exception e){ 
      e.printStackTrace(); 
     } 

    ManagedEntity[] managedEntities = new InventoryNavigator(
       si.getRootFolder()).searchManagedEntities("VirtualMachine"); 
    ManagedEntity[] hostmanagedEntities = new InventoryNavigator(
       si.getRootFolder()).searchManagedEntities("HostSystem"); 

    for (ManagedEntity hostmanagedEntity : hostmanagedEntities) { 
    HostSystem hostsys = (HostSystem) hostmanagedEntity; 

    String ESXhostname = hostsys.getName(); 
    //System.out.println("main system version is .. " + hostsys.getConfig()); 

    HostListSummary hls = hostsys.getSummary(); 
      HostHardwareSummary hosthwi = hls.getHardware(); 
      HostListSummaryQuickStats hqs = hls.getQuickStats(); 
      Datastore[] HDS = hostsys.getDatastores(); 
      StringBuilder DS = new StringBuilder(); 
      for (int i=0;i <HDS.length;i++){ 
       DatastoreSummary dsm =HDS[i].getSummary(); 

       DS.append(dsm.name+":"+dsm.capacity+":"+dsm.freeSpace+"-"); 
      } 

    int MEM=hqs.overallMemoryUsage; 
    int UPT=hqs.getUptime(); 
    Integer CPU=hqs.getOverallCpuUsage(); 

    String esxkey = "ESXRealInfo"; 
    String esxvalue = "ESXhostname-" + ESXhostname 
      + ";CPU Usage-" + CPU + ";MEM Usage-" 
      + MEM + ";UPTIME-" + UPT+"; Datastores -"+DS; 
    try { 
     esxcmdout.put(esxkey, esxvalue); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
    e.printStackTrace(); 
    } 
    } 

    for (int i = 0; i < managedEntities.length; i++) { 
    VirtualMachine vm = (VirtualMachine) managedEntities[i]; 
    String vmName = vm.getName(); 
    String vmIP = vm.getGuest().getIpAddress(); 
    VirtualMachineConfigInfo config = vm.getConfig(); 
    VirtualHardware hw = config.getHardware(); 
    String vmVersion = config.version; 
    System.out.println("######### vm version is ###### ... "+ vmVersion); 
    int vmCPU = hw.getNumCPU(); 
    int vmMem = hw.getMemoryMB(); 
    //sasSystem.out.println(vmName + vmIP + vmCPU + vmMem); 
    String vmkey = "vm" + i; 
    String vmvalues = "Name-" + vmName + ";IP-" + vmIP + ";vmCPU-" 
      + vmCPU + ";vmMem-" + vmMem + ";vmVersion-" + vmVersion; 
      System.out.println("string to write is... "+vmvalues); 
    try { 
     esxcmdout.put(vmkey, vmvalues); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    } 
    si.getServerConnection().logout(); 
    } 

    catch (InvalidProperty e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (RuntimeFault e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (RemoteException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (MalformedURLException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

    try { 
     runMT.httpput(runtype, host, vmwtype, esxcmdout); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
} 

此代碼工作正常,收集ESX設備的信息。 如何解決vcenter的證書錯誤? 有沒有其他方法可以做到這一點?

+0

[是否有可能讓Java忽略「信任存儲」並接受它獲得的任何SSL證書?](http://stackoverflow.com/questions/1219208/is-it-possible-to-get-java-to-ignore-the -trust-store-and-just-accept-whatever) –

回答

0

您必須導入證書,以便通過此vSphere_Documentation頁面瞭解導入證書。

編輯:

試試下面的代碼給出看看這個answer

KeyStore keyStore = KeyStore.getInstance("JKS"); 
String fileName = "D:\\certs_path\\cacerts"; // cerrtification file path 
System.setProperty("javax.net.ssl.trustStore", fileName); 
+0

如何以編程方式執行此操作?我可以使用java程序導入證書嗎? – Vishwas

0

嘗試改變對服務實例的最後一個參數false這樣的:ServiceInstance si = new ServiceInstance(new URL(url), user, pass,false);

相關問題