Ниже приведено исключение, которое бросает Java при проверке имени хоста для сертификата, хранящегося в хранилище ключей. Я считаю, что он проверяет хранилище ключей в формате JKS. Я бы хотел написать очень простую Java-программу, чтобы получить имя хоста, поскольку Java получает имя хоста в этом исключении.Как получить то же имя хоста, которое получает Java в этом исключении
Какая строка кода получит имя хоста в Java, поэтому она эквивалентна этому исключению?
Удельное исключение:
com.sun.jersey.api.client.ClientHandlerException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: Нет совпадения имени shr-test.hosp.org найдено: 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) at net.shrine.adapter.client.RemoteAdapterClient $$ anonfun $ query $ 2 $$ anonfun $ apply $ 1.apply (RemoteAdapterCl ient.scala: 56) в net.shrine.adapter.client.RemoteAdapterClient $$ anonfun $ запрос $ 2 $$ anonfun $ применять $ 1.Apply (RemoteAdapterClient.scala: 54) в scala.concurrent.impl.ExecutionContextImpl $ 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) в net.shrine.adapter.client.RemoteAdapterClient $$ anonfun $ query $ 2.apply (RemoteAdapterClient .scala: 54) по адресу net.shri ne.adapter.client.RemoteAdapterClient $$ anonfun $ $ 2.Apply запроса (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) на sun.security.ssl.SSLSocketImpl.fatal (SSLSocketImpl.java:1884) на sun.security.ssl.Handshaker.fatalSE (Handshaker.java:276) на sun.security.ssl.Handshaker.fatalSE (Handshaker.java:270) на 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) в 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) в sun.nio.cs.StreamEncoder.implFlushBuffer (StreamEncoder.java:291) на sun.nio.cs.StreamEncoder.implFlush (StreamEncoder.java:295) на sun.nio.cs.StreamEncoder.flush (StreamEncoder.java : 141) на java.io.OutputStreamWrit er.flush (OutputStreamWriter.java:229) в java.io.BufferedWriter.flush (BufferedWriter.java:254) в 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) на com.sun.jersey.api.client.RequestWriter.writeRequestEntity (RequestWriter.java:300) на com.sun.jersey.client.urlconnection.URLC onnectionClientHandler._invoke (URLConnectionClientHandler.java:217) на com.sun.jersey.client.urlconnection.URLConnectionClientHandler.handle (URLConnectionClientHandler.java:153) ... более 21 Вызванный: java.security.cert.CertificateException: Нет имя совпадения shr-test.hosp.org найдено по адресу sun.security.util.HostnameChecker.matchDNS (HostnameChecker.java:208) at sun.security.util.HostnameChecker.match (HostnameChecker.java:93) по адресу 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