【问题标题】:How to allow HTTPS for Grails 3 application on localhost?如何在本地主机上允许 Grails 3 应用程序使用 HTTPS?
【发布时间】:2018-09-07 01:47:04
【问题描述】:

我正在尝试将 Facebook 登录添加到我的应用程序中,为此我必须在 HTTPS 上运行。我已经按照here 描述的步骤创建了我的 SSL 证书。 在我运行 grails run-app -https 后,我得到这个错误:

ERROR org.apache.coyote.http11.Http11NioProtocol - Failed to start end point associated with ProtocolHandler [https-jsse-nio-8443]
java.lang.IllegalArgumentException: None of the [ciphers] specified are supported by the SSL engine : [[]]
        at org.apache.tomcat.util.net.SSLUtilBase.getEnabled(SSLUtilBase.java:87)
        at org.apache.tomcat.util.net.SSLUtilBase.<init>(SSLUtilBase.java:61)
        at org.apache.tomcat.util.net.jsse.JSSEUtil.<init>(JSSEUtil.java:142)
        at org.apache.tomcat.util.net.jsse.JSSEImplementation.getSSLUtil(JSSEImplementation.java:49)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:95)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:85)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225)
        at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:980)
        at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:573)
        at org.apache.catalina.connector.Connector.startInternal(Connector.java:993)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        at org.apache.catalina.core.StandardService.addConnector(StandardService.java:225)
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:194)
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:151)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:293)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
        at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:55)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:374)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:363)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at ikariera3.Application.main(Application.groovy:8)
ERROR org.apache.catalina.core.StandardService - Failed to start connector [Connector[HTTP/1.1-8443]]
org.apache.catalina.LifecycleException: Failed to start component [Connector[HTTP/1.1-8443]]
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:167)
        at org.apache.catalina.core.StandardService.addConnector(StandardService.java:225)
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.addPreviouslyRemovedConnectors(TomcatEmbeddedServletContainer.java:194)
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:151)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:293)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
        at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:55)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:374)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:363)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at ikariera3.Application.main(Application.groovy:8)
Caused by: org.apache.catalina.LifecycleException: service.getName(): "Tomcat";  Protocol handler start failed
        at org.apache.catalina.connector.Connector.startInternal(Connector.java:1000)
        at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
        ... 18 common frames omitted
Caused by: java.lang.IllegalArgumentException: None of the [ciphers] specified are supported by the SSL engine : [[]]
        at org.apache.tomcat.util.net.SSLUtilBase.getEnabled(SSLUtilBase.java:87)
        at org.apache.tomcat.util.net.SSLUtilBase.<init>(SSLUtilBase.java:61)
        at org.apache.tomcat.util.net.jsse.JSSEUtil.<init>(JSSEUtil.java:142)
        at org.apache.tomcat.util.net.jsse.JSSEImplementation.getSSLUtil(JSSEImplementation.java:49)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:95)
        at org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:85)
        at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:225)
        at org.apache.tomcat.util.net.AbstractEndpoint.start(AbstractEndpoint.java:980)
        at org.apache.coyote.AbstractProtocol.start(AbstractProtocol.java:573)
        at org.apache.catalina.connector.Connector.startInternal(Connector.java:993)
        ... 19 common frames omitted
ERROR org.springframework.boot.SpringApplication - Application startup failed
org.springframework.boot.context.embedded.EmbeddedServletContainerException: Unable to start embedded Tomcat servlet container
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:165)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.startEmbeddedServletContainer(EmbeddedWebApplicationContext.java:293)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.finishRefresh(EmbeddedWebApplicationContext.java:141)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541)
        at org.springframework.boot.context.embedded.EmbeddedWebApplicationContext.refresh(EmbeddedWebApplicationContext.java:118)
        at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:766)
        at org.springframework.boot.SpringApplication.createAndRefreshContext(SpringApplication.java:361)
        at org.springframework.boot.SpringApplication.run(SpringApplication.java:307)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:55)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:374)
        at grails.boot.GrailsApp.run(GrailsApp.groovy:363)
        at grails.boot.GrailsApp$run.call(Unknown Source)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133)
        at ikariera3.Application.main(Application.groovy:8)
Caused by: java.lang.IllegalStateException: Tomcat connector in failed state
        at org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainer.start(TomcatEmbeddedServletContainer.java:159)
        ... 15 common frames omitted

我的 aaplication.yml 中有这个配置:

server:
    port: 8443
    ssl:
        keyStore: C:\\my path\\ia.p12
        keyStorePassword: mypassword

我尝试使用 PKCS12 格式的密钥,结果相同。

这些是我用来创建 PKCS12 格式密钥的带有输入值的命令。

  1. genrsa -out ca.key 4096
  2. req -new -x509 -days 365 -key ca.key -out ca.cry
    • 国家名称:SK
    • 州或省名称:Zilina
    • 地区名称:Zilina
    • 组织名称:IKariera
    • 组织单位..:
    • 通用名:exampleName
    • 电子邮件地址:my.example@gmail.com
  3. req -new -x509 -days 365 -key ca.key -out ca.cry
  4. req -new -key ia.key -out ia.csr
    • 国家名称:SK
    • 州或省名称:Zilina
    • 地区名称:Zilina
    • 组织名称:IKariera
    • 组织单位..:代码签名
    • 通用名称:协同设计
    • 电子邮件地址:my.example@gmail.com
    • 挑战密码:mypassword
  5. x509 -req -days 365 -in ia.csr -CA ca.crt -CAkey -set_serial 01 -out ia.crt
  6. pkcs12 -export -out ia.p12 -inkey ia.key -in ia.crt -chain -CAfile ca.crt
    • 导出密码:mypassword

有谁知道可能导致此错误的原因是什么?非常感谢。

【问题讨论】:

    标签: ssl grails https


    【解决方案1】:

    请考虑一下 https://letsencrypt.org/docs/certificates-for-localhost/

    openssl req -x509 -out localhost.crt -keyout localhost.key \ -newkey rsa:2048 -nodes -sha256 \ -subj '/CN=localhost' -extensions EXT -config <( \ printf "[dn]\nCN=localhost\n[req]\ndistinguished_name = dn\n[EXT]\nsubjectAltName=DNS:localhost\nkeyUsage=digitalSignature\nextendedKeyUsage=serverAuth")

    【讨论】:

      【解决方案2】:

      请检查您的自签名证书是否正确创建。

      我已经使用 thisthis 这个参考创建了自签名证书。并成功创建并使用。

      请检查所有步骤并检查并验证.p12文件

      我的application.yml 文件

      server:
          port: 8443
          ssl:
            keyStore: YOUR_PATH/ia.p12
            keyStorePassword: YOUR_PASS
      

      如果您在基于 Linux 的操作系统上运行它,那么 keyStore 路径将类似于 /usr/../your-p12-File,在 Windows 上您可以使用 D:\\ia.p12

      keyStorePassword : 输入您在创建证书步骤中提供的相同密码。

      您可以使用任何端口号,请删除 enabled: truekeyAlias: tomcat 字段。这不是必需的(在我的情况下)

      以上步骤使用 grails 3.x 测试

      希望对你有帮助。

      【讨论】:

      • 感谢您的提示!但我仍然遇到同样的错误。
      • 我已经添加了我为创建证书而采取的问题步骤。与你的创作相比,或许有一些不同?
      • 我不知道,您是如何创建证书的。但我遵循了 YouTube 教程并完成了它。我在创建认证时也遇到了很多错误。并遵循了许多教程,但本教程最终帮助我创建了 ssl 证书。请尝试一下,否则我将更新答案中的所有步骤
      • 我尝试了 YouTube 教程中的步骤。我已将这些内容发布到我原来的问题中,并附有使用过的值。如果有问题,请检查。但我认为这可能与某处的某些配置有关。
      • 你能用这个试试port: 8090吗?似乎一个例外就像"Tomcat"; Protocol handler start failed
      猜你喜欢
      • 2017-01-14
      • 2020-09-11
      • 1970-01-01
      • 2011-08-17
      • 2020-04-30
      • 1970-01-01
      • 2021-05-29
      • 1970-01-01
      • 2012-06-28
      相关资源
      最近更新 更多