簡體   English   中英

java程序的自簽名證書

[英]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

簡短回答:

首先使用服務器的DNS名稱而不是IP進行測試( 此處有詳細說明)。

其次,如果你想使用證書,你必須導入服務器證書,而不是自己生成一個...

證書由Tomcat使用,而不是您的客戶端。 請參閱Tomcat SSL文檔。

生成證書時,請嘗試添加-dname CN=10.100.13.36 我認為您甚至不需要使用主題備用名稱。 公用名(CN)應該等於您在要連接的URL中使用的域名。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM