代码之家  ›  专栏  ›  技术社区  ›  kurtgn

keycloop-SSL错误:证书不符合算法约束

  •  0
  • kurtgn  · 技术社区  · 6 年前

    docker run --rm --name keycloak \
    -p 9090:8080 -e KEYCLOAK_USER=xxx \
    -e KEYCLOAK_PASSWORD=xxx \
    -e DB_VENDOR=postgres \
    -e DB_ADDR=mydb2.xxx.rds.amazonaws.com:5432 \
    -e DB_USER=xxx \
    -e DB_PASSWORD=xxx \
    -e DB_DATABASE=keycloak \
    jboss/keycloak:latest
    

    05:18:54,776 ERROR [org.jboss.as.controller.management-operation] (Controller Boot Thread) WFLYCTL0013: Operation ("add") failed - address: ([("deployment" => "keycloak-server.war")]) - failure description: {"WFLYCTL0080: Failed services" => {"jboss.deployment.unit.\"keycloak-server.war\".undertow-deployment" => "java.lang.RuntimeException: RESTEASY003325: Failed to construct public org.keycloak.services.resources.KeycloakApplication(javax.servlet.ServletContext,org.jboss.resteasy.core.Dispatcher)
        Caused by: java.lang.RuntimeException: RESTEASY003325: Failed to construct public org.keycloak.services.resources.KeycloakApplication(javax.servlet.ServletContext,org.jboss.resteasy.core.Dispatcher)
        Caused by: java.lang.RuntimeException: Failed to connect to database
        Caused by: java.sql.SQLException: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/datasources/KeycloakDS
        Caused by: javax.resource.ResourceException: IJ000453: Unable to get managed connection for java:jboss/datasources/KeycloakDS
        Caused by: javax.resource.ResourceException: IJ031084: Unable to create connection
        Caused by: org.postgresql.util.PSQLException: SSL error: Certificates do not conform to algorithm constraints
        Caused by: javax.net.ssl.SSLHandshakeException: Certificates do not conform to algorithm constraints
        Caused by: java.security.cert.CertificateException: Certificates do not conform to algorithm constraints
        Caused by: java.security.cert.CertPathValidatorException: Algorithm constraints check failed on keysize limits. RSA 1024bit key used with certificate: C=US, ST=Washington, L=Seattle, O=Amazon.com, OU=RDS, CN=mydb2.xxx.us-east-1.rds.amazonaws.com.  Usage was tls server"}}
    

    我确信以下几点:

    • RDS实例可用,端口打开。我查过了 psql .
    • jboss/keycloak:7.0.1 不会发生在 jboss/keycloak:7.0.0 . 版本 7.0.0 工作正常。

    为什么会发生这种情况?如何解决?

    这可能是一个过于宽泛的问题,但我不是一个Java人(我主要是做Python的),所以这是我能做的最窄的问题。

    0 回复  |  直到 6 年前
        1
  •  3
  •   granra    6 年前

    就像上面说的 Jan Garaj's answer 使用不同的Java版本。

    这是失败的,因为RDS使用的RSA密钥只有1024位长 java.security 只允许密钥长度超过1024位。

    正在将RDS更新到新的证书颁发机构( rds-ca-2019 )似乎可以创建更长的密钥并解决此问题。

    AWS has documentation on how to do this.

        2
  •  1
  •   Jan Garaj    6 年前

    这看起来像是Java安全性的问题。使用了不同的Java版本(1.8版本和11版本),因此可能需要对其进行一些调整 java.security 或RDS侧的密码配置(如果可能):

    您可以比较和调整7.0.1 java.security 文件:

    $ docker run --rm -ti --entrypoint bash jboss/keycloak:7.0.1 \
      -c 'cat /etc/java/java-11-openjdk/java-11-openjdk-*/conf/security/java.security | grep -v ^# | grep -v ^$'
    
    $ docker run --rm -ti --entrypoint bash jboss/keycloak:7.0.0 \
      -c 'cat /usr/lib/jvm/java-1.8.0-openjdk-*/jre/lib/security/java.security | grep -v ^# | grep -v ^$'