2016-08-17 1 views
0

Ниже приведено исключение, которое бросает Java при проверке имени хоста для сертификата, хранящегося в хранилище ключей. Я считаю, что он проверяет хранилище ключей в формате JKS. Я бы хотел написать очень простую Java-программу, чтобы получить имя хоста, поскольку Java получает имя хоста в этом исключении.Как получить то же имя хоста, которое получает Java в этом исключении

Какая строка кода получит имя хоста в Java, поэтому она эквивалентна этому исключению?

http://java.globinch.com/enterprise-java/security/fix-java-security-certificate-exception-no-matching-localhost-found/

Удельное исключение:

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

+0

Вы уверены, что это не имеет ничего общего с именем хоста? В беглом взгляде кажется, что вы пытаетесь подключиться к службе с использованием имени хоста A и получить сертификат, который предназначен для имени хоста B. Поэтому вместо этого вы должны подключиться к имени хоста B, если он разрешит один и тот же адрес. – RealSkeptic

+0

Что я в конечном итоге после этого, как этот класс Java получает два значения имени хоста? Я предполагаю, что он получает имя хоста сертификата из JKS, используя некоторую функцию JKS. Но как он получает другое значение имени хоста в сравнении значений в этом классе? ... java.security.cert.CertificateException: – MacGyver

+0

Он получает сертификат непосредственно с сервера SSL при его подключении. Это часть переговоров SSL (или, скорее, TLS, я полагаю). И я думаю, что он сравнивает это с именем хоста, которое вы передали в URL-адресе. – RealSkeptic

ответ

0

я набрал мое имя в поле CN (Common Name). Поэтому, когда он выполнил поиск хранилища ключей JKS, он обнаружил «MacGyver», а не CNAME.

Причиной является ошибка программного обеспечения при создании стороннего хранилища сторонних сайтов (например, самозаверяющего SSL-сертификата с использованием настраиваемого CA). В одном из приглашений спрашивается: «Каково ваше имя и фамилия?», Когда должен ответить «Что такое общее имя сертификата?» Когда закончите, и вы запустите команду keytool -list в хранилище ключей, это значение будет помещено в поле «CN». Ниже приведено неверное введенное значение и обратите внимание на значение «CN» по окончании. Просто будьте осторожны с этим.

keytool -genkey -keyalg RSA -alias shrine-snow -keystore shrine.keystore -storepass XXXXX! -validity 360 -keysize 2048 

What is your first and last name? 
    [Unknown]: Angus MacGyver 
What is the name of your organizational unit? 
    [Unknown]: Criminal Investigation 
What is the name of your organization? 
    [Unknown]: Phoenix Foundation 
What is the name of your City or Locality? 
    [Unknown]: Madison 
What is the name of your State or Province? 
    [Unknown]: Wisconsin 
What is the two-letter country code for this unit? 
    [Unknown]: US 
Is CN=Angus MacGyver, OU=Criminal Investigation, O=Phoenix Foundation, L=Madison, ST=Wisconsin, C=US correct? 
    [no]: yes 

Enter key password for <selfsigned> 
     (RETURN if same as keystore password):XXXXX! 
Re-enter new password:XXXXX! 

Вы можете проверить содержимое магазина с помощью этого:

keytool -v -list -keystore shrine.keystore 
Смежные вопросы