3

私は1つのサーバーに接続してそのサーバーと対話し、単純なタスクを実行する1つの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 パラメータに含める必要があります」と答えました。

私の疑問を明確にし、これに光を当ててください..

ありがとうございました。

4

4 に答える 4

1

表示されるエラーは、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
于 2012-05-31T18:26:27.563 に答える
0

簡潔な答え:

IP の代わりにサーバーの DNS 名を使用して最初のテストを行います (長い説明はこちら)。

次に、証明書を使用する場合は、自分で生成するのではなく、サーバー証明書をインポートする必要があります...

于 2012-05-31T18:34:22.317 に答える
0

証明書は、クライアントではなく Tomcat によって使用されます。Tomcat SSL のドキュメントを参照してください。

于 2012-05-31T21:58:27.543 に答える
0

-dname CN=10.100.13.36証明書を生成するときに追加してみてください。サブジェクトの代替名を使用する必要さえないと思います。共通名 (CN) は、接続する URL で使用したドメイン名と同じである必要があります。

于 2012-06-02T19:21:48.210 に答える