java - 证书中的主机名与OAuth请求中的主机名不匹配

原文 标签 java ssl https oauth keytool

我已经通过openssl创建了证书

Openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout tls.key -out tls.crt -subj "/CN=nginxsvc/O=nginxsvc"


并通过java中的keytool导入tls.crt

keytool -import -file C:\Code_Base\Certificates\NGINX_150\tls.crt -storepass changeit -keystore "C:\Program Files\Java\jdk1.8.0_152\jre\lib\security\cacerts"


但是我越来越


  16:30:21,046错误[org.keycloak.adapters.OAuthRequestAuthenticator]
  (http- / 0.0.0.0:8080-1)无法将代码转换为令牌:
  javax.net.ssl.SSLException:证书中的主机名不匹配:
  <135.209.100.150>!=在
  org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:238)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.conn.ssl.BrowserCompatHostnameVerifier.verify(BrowserCompatHostnameVerifier.java:54)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:159)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:140)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.conn.ssl.SSLSocketFactory.verifyHostname(SSLSocketFactory.java:561)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:536)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.keycloak.adapters.SniSSLSocketFactory.connectSocket(SniSSLSocketFactory.java:109)
  [keycloak-adapter-core-2.4.0.Final.jar:2.4.0.Final]在
  org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:403)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:177)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:144)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:131)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:611)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:446)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.client.AbstractHttpClient.doExecute(AbstractHttpClient.java:863)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:82)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:106)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:57)
  [httpclient-4.3.6.redhat-1.jar:4.3.6.redhat-1]位于
  org.keycloak.adapters.ServerRequest.invokeAccessCodeToToken(ServerRequest.java:107)
  [keycloak-adapter-core-2.4.0.Final.jar:2.4.0.Final]在
  org.keycloak.adapters.OAuthRequestAuthenticator.resolveCode(OAuthRequestAuthenticator.java:327)
  [keycloak-adapter-core-2.4.0.Final.jar:2.4.0.Final]在
  org.keycloak.adapters.OAuthRequestAuthenticator.authenticate(OAuthRequestAuthenticator.java:273)
  [keycloak-adapter-core-2.4.0.Final.jar:2.4.0.Final]在
  org.keycloak.adapters.RequestAuthenticator.authenticate(RequestAuthenticator.java:130)
  [keycloak-adapter-core-2.4.0.Final.jar:2.4.0.Final]在
  org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.authenticateInternal(AbstractKeycloakAuthenticatorValve.java:208)
  [keycloak-tomcat-core-adapter-2.4.0.Final.jar:2.4.0.Final]在
  org.keycloak.adapters.jbossweb.KeycloakAuthenticatorValve.authenticate(KeycloakAuthenticatorValve.java:39)
  [keycloak-as7-adapter-2.4.0.Final.jar:2.4.0.Final]在
  org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:478)
  [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]在
  org.keycloak.adapters.tomcat.AbstractKeycloakAuthenticatorValve.invoke(AbstractKeycloakAuthenticatorValve.java:187)
  [keycloak-tomcat-core-adapter-2.4.0.Final.jar:2.4.0.Final]在
  org.jboss.as.web.security.SecurityContextAssociationValve.invoke(SecurityContextAssociationValve.java:169)
  [jboss-as-web-7.5.0.Final-redhat-21.jar:7.5.0.Final-redhat-21]在
  org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:150)
  [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]在
  org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:97)
  [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]在
  org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:102)
  [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]在
  org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344)
  [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]在
  org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:854)
  [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]在
  org.apache.coyote.http11.Http11Protocol $ Http11ConnectionHandler.process(Http11Protocol.java:653)
  [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]在
  org.apache.tomcat.util.net.JIoEndpoint $ Worker.run(JIoEndpoint.java:926)
  [jbossweb-7.5.7.Final-redhat-1.jar:7.5.7.Final-redhat-1]在
  java.lang.Thread.run(Thread.java:748)[rt.jar:1.8.0_152]

最佳答案

当您的SSL / TLS证书的common name(或多个SAN)与尝试访问您的服务时另一服务连接的主机+域名不匹配时,会发生常见名称不匹配错误。

您的CommonName(CN = nginxsvc)应该与主机和服务的域名/ IP相匹配。因此,如果您的服务位于nginxservice.yourdomain.com,则证书通用名也应为nginxservice.yourdomain.com。如果您仅将IP用于开发目的,则也可以使用该IP,直到拥有用于服务的DNS条目为止。

关于java - 证书中的主机名与OAuth请求中的主机名不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48500408/

相关文章:

mongodb - MongoDB和我们加密=“服务器证书与主机名不匹配”

node.js - Nodejs SSL错误,在Linux上具有有效的SSL证书,但在Windows上无效

networking - 大多数防火墙的默认配置是否允许安全TCP与HTTPS相同?

java - 分割并裁剪Java中的字符串数组

java - Selenium Webdriver Java代码,如果在设置的时间段后找不到页面上的文本,则显示消息

java - Spring Java Config EJB代理不起作用

java - 播放来自vlcj播放器阵列的视频

C# - 使用 SSL 保护 `sockets`

ssl 证书-从 csr 获取私钥

iphone - 如何在 Cocoa Touch 中验证网站证书?