下同hostname是被通过的Java检查存储在密钥库证书的主机名时抛出异常。我相信它正在检查一个JKS格式的密钥库。我想编写一个非常简单的Java程序来获取主机名,因为Java在此异常中获取主机名。如何获取Java的获取此异常
什么代码行会得到在Java中的主机名,所以它等于这个异常?
特例:
com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException:没有匹配的名称 shr-test.hosp.org found: com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: java.security.c ert.CertificateException:没有匹配的名称 shr-test.hosp.org发现在 com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:155) at com.sun.jersey.api.client。 Client.handle(Client.java:652)在 com.sun.jersey.api.client.WebResource.handle(WebResource.java:682)在 com.sun.jersey.api.client.WebResource.access $ 200(WebResource .java:74) at com.sun.jersey.api.client.WebResource $ Builder.post(WebResource.java:560) at net.shrine.client.JerseyHttpClient.post(JerseyHttpClient.scala:63) at net.shrine.client.Poster.post(Poster.scala:10)在 net.shrine.adapter.client.RemoteAdapterClient $$ anonfun $查询$ 2 $$ anonfun $ $适用1.适用(RemoteAdapterCl ient.scala:56) 在 net.shrine.adapter.client.RemoteAdapterClient $$ anonfun $查询$ 2 $$ anonfun $ $适用1.适用(RemoteAdapterClient.scala:在 scala.concurrent.impl.ExecutionContextImpl $ 54) DefaultThreadFactory $$匿名$ $$ 2匿名$ 4.block(ExecutionContextImpl.scala:48) 在 scala.concurrent.forkjoin.ForkJoinPool.managedBlock(ForkJoinPool.java:3640) 在 scala.concurrent.impl.ExecutionContextImpl $ $ DefaultThreadFactory $ anon $ 2.blockOn(ExecutionContextImpl.scala:45) at scala.concurrent.package $ .blocking(package.scala:54)at net.shrine.adapter.client.RemoteAdapterClient $$ anonfun $ query $ 2.apply(RemoteAdapterClient .scala:54) at net.shri ne.adapter.client.RemoteAdapterClient $$ anonfun $查询$ 2.适用(RemoteAdapterClient.scala:54) 在 scala.concurrent.impl.Future $ PromiseCompletingRunnable.liftedTree1 $ 1(Future.scala:24) 在 scala.concurrent .impl.Future $ PromiseCompletingRunnable.run(Future.scala:24) 在 scala.concurrent.impl.ExecutionContextImpl $ AdaptedForkJoinTask.exec(ExecutionContextImpl.scala:121) 在 scala.concurrent.forkjoin.ForkJoinTask.doExec(ForkJoinTask的.java:260) 在 scala.concurrent.forkjoin.ForkJoinPool $ WorkQueue.runTask(ForkJoinPool.java:1339) 在 scala.concurrent.forkjoin.ForkJoinPool.runWorker(ForkJoinPool.java:1979) at scala.concurrent.forkjoin.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:107) 原因:javax.net.ssl.SSLHandshakeException: java.security.cert。CertificateException:没有匹配的名称 shr-test.hosp.org sun.security.ssl.Alerts.getSSLException(Alerts.java:192)at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1884)在 sun.security.ssl.Handshaker.fatalSE(Handshaker.java:276)at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:270)at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker。的java:1341) 在 sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:153) 在sun.security.ssl.Handshaker.processLoop(Handshaker.java:868)在 sun.security.ssl.Handshaker .process_record(Handshaker.java:804)at sun.security.ssl.SSLSocketImpl.readRecord(SS LSocketImpl.java:1016)在 sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1312) 在 sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1339) 在 sun.security。 ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1323) 在 sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:563) 在 sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection。连接(AbstractDelegateHttpsURLConnection.java:185) 在 sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1091) 在 sun.net.www.protocol.https.HttpsURLConne ctionImpl.getOutputStream(HttpsURLConnectionImpl.java:250) 在 com.sun.jersey.client.urlconnection.URLConnectionClientHandler $ 1 $ 1.getOutputStream(URLConnectionClientHandler.java:238) 在 com.sun.jersey.api.client.CommittingOutputStream。 commitStream(CommittingOutputStream.java:117) at com.sun.jersey.api.client.CommittingOutputStream.write(CommittingOutputStream.java:89) at sun.nio.cs.StreamEncoder.writeBytes(StreamEncoder.java:221)at sun.nio.cs.StreamEncoder.implFlushBuffer(StreamEncoder.java:291)在 sun.nio.cs.StreamEncoder.implFlush(StreamEncoder.java:295)在 sun.nio.cs.StreamEncoder.flush(StreamEncoder.java :141)at java.io.OutputStreamWrit er.flush(OutputStreamWriter.java:229)at java.io.BufferedWriter.flush(BufferedWriter.java:254)at com.sun.jersey.core.util.ReaderWriter.writeToAsString(ReaderWriter.java:191) at com.sun.jersey.core.provider.AbstractMessageReaderWriterProvider.writeToAsString(AbstractMessageReaderWriterProvider.java:128) 在 com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:88) 在 com.sun.jersey.core.impl.provider.entity.StringProvider.writeTo(StringProvider.java:58) at com.sun.jersey.api.client.RequestWriter.writeRequestEntity(RequestWriter.java:300) at com.sun.jersey.client.urlconnection.URLC java.security.cert.CertificateException:onnectionClientHandler._invoke(URLConnectionClientHandler.java:217) 在 com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle(URLConnectionClientHandler.java:153) ...... 21多产生的原因:没有 姓名匹配shr-test.hosp.org发现在 sun.security.util.HostnameChecker.matchDNS(HostnameChecker.java:208) at sun.security.util.HostnameChecker.match(HostnameChecker.java:93)at sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:347) 在 sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:203) 在 sun.security.ssl.X509TrustManagerImpl。checkServerTrusted(X509TrustManagerImpl.java:126) 在 sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1323) ...... 48多个
我想问的原因是因为我的操作系统有两个不同的主机名值。系统主机名和VServer主机名。我能够用配置层次来控制系统主机名。他们实际上是不同的。为了使证书与Java看到的相匹配,我需要避免这种异常并让它们匹配。
看到这个问题以供参考:
https://serverfault.com/questions/793689/getting-hostname-on-centos-6-6-from-command-line
这...
https://serverfault.com/questions/793689/getting-hostname-on-centos-6-6-from-command-line
你肯定有什么用您的主机名?粗略看来,您似乎试图使用主机名A连接到服务,并获取主机名为B的证书。因此,如果它解析为相同的地址,则应该连接到主机名B. – RealSkeptic
我最终追求的是这个Java类如何获得两个主机名值?我想它使用一些JKS函数从JKS获取证书主机名。但是它如何在这个类的值比较中获得另一个主机名值? ... java.security.cert.CertificateException: – MacGyver
它在进行连接时直接从SSL服务器获取证书。这是SSL(或者说TLS,我想)谈判的一部分。我想它会将它与您在URL中传递的主机名进行比较。 – RealSkeptic