如何在Grails 3.1.6+中配置SSL?

时间:2016-05-31 23:10:45

标签: spring ssl grails-3.1 embedded-tomcat-8

我们最近从使用独立的Tomcat 8容器变为使用嵌入式Tomcat 8容器。我们在使用嵌入式容器获取SSL以使用Grails 3.1.6时遇到一些麻烦。我们一直在使用带有独立容器的APR Native Libraries的certificateFile方法。我们希望将此方法与嵌入式Tomcat保持一致,而不是更改为密钥库方法。我尝试了Grails文档,深入研究了Spring Boot嵌入式容器文档,但还没有找到可行的解决方案。

我在application.yml中尝试了许多不同的配置方法。根据几个不同的文档,来源等,我最近的尝试是:

environments:
  test:
    grails:
        server:
            port: 8443
            ssl:
                enabled: true
            certificateKeyFile: '/usr/share/app/my_domain_net.key'
            certificateFile: '/usr/share/app/my_domain_net.crt'
            certificateChainFile: '/usr/share/app/myCA.crt'
        serverURL: "https://test.mydomain.net:8443"
        tomcat:
            port: 8443
            ssl:
                enabled: true
            certificateKeyFile: '/usr/share/app/my_domain_net.key'
            certificateFile: '/usr/share/app/my_domain_net.crt'
            certificateChainFile: '/usr/share/app/myCA.crt'

我也尝试将其添加到application.yml:

的末尾
server:
    port: 8443
    ssl:
        enabled: true
    certificateKeyFile: '/usr/share/app/my_domain_net.key'
    certificateFile: '/usr/share/app/my_domain_net.crt'
    certificateChainFile: '/usr/share/app/myCA.crt'

但这给了我'资源位置可能不为空'的错误。我看到的大多数例子和问题在这一点上已经过时了。是时候在stackoverflow上提出一个新问题了。提前谢谢!

1 个答案:

答案 0 :(得分:2)

即使在LD_LIBRARY_PATH上加载了APR本机库,也无法使用openssl certificateKeyFile方法。 (我认为如果你编辑grails-app / init / myapp / Application.groovy并遵循Spring就可以了 添加额外连接器的文档(在http://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html的第70.9段),但这很困难,您需要阅读org.springframework源以了解如何使用openssl证书和APR Native进行此工作。)对我来说,这不值得,所以这里是你如何使用密钥库方法。

我必须使用Tomcat keytool方法重新修改证书。

然后,application.yml更新为如下所示:

---
---
environments:
    development:
        server:
            port: 8080
            ssl:
                enabled: false
        grails:
            serverURL: "http://localhost:8080"

---
---
environments:
    test:
        server:
            port: 8443
            ssl:
                enabled: true
            key-store: classpath:my_domain_net.jks
            key-store-password: mypassword
            key-password: mypassword
        grails:
            serverURL: "https://test.mydomain.net:8443"

我准备证书的过程是:

1) create a directory for ssl_certificates
2) pick a Certificate Authority (I chose DigiCert)
3) use the CA's instructions for generating a csr for Tomcat:keytool
4) the CA's keytool command asks for a keystore password and key password
5) submit the csr and wait ~10 minutes for the cert to be issued
6) download the issued certificate as my_domain_net.p7b into the
   ssl_certificates folder created above
7) keytool -import -trustcacerts -alias server -file my_domain_net.p7b \
       -keystore my_domain_net
8) copy my_domain_net.jks into src/main/resources/ of your web project.