gpt4 book ai didi

java - 如何使用Java删除安全证书异常?

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:19 25 4
gpt4 key购买 nike

我正在使用 vmware API。通过使用此 API,我能够获取 ESX 设备的信息。现在我想使用此 API 获取有关 vcenter 的信息,但出现异常:

java.rmi.RemoteException:VI SDK 调用异常:javax.net.ssl.SSLHandshakeException:java.security.cert.CertificateException:证书不符合算法约束

代码如下:

                    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);

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();
}
}

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();
}


}

此代码可以很好地收集 ESX 设备的信息。如何解决 vcenter 证书错误?有没有其他方法可以做到这一点?

最佳答案

出现此异常的原因之一是 HTTPs 服务器(在您的情况下为 vCenter Server)提供的证书使用 MD2 算法签名,并且 HTTP 客户端(您的代码)使用 JAVA 7。参见 this发布更多详细信息。请尝试以下 2 个选项之一。

  1. 使用 JAVA 6。
  2. 在文件 JDK_HOME/jre/lib/security/java.security 中注释掉行“jdk.certpath.disabledAlgorithms=MD2”

检查错误是否已解决。

关于java - 如何使用Java删除安全证书异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21159723/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com