如何在 Grails 3.1.6+ 中配置 SSL?
How to configure SSL in Grails 3.1.6+?
我们最近从使用独立 Tomcat 8 个容器改为使用嵌入式 Tomcat 8 个容器。我们在使用嵌入式容器使 SSL 在 Grails 3.1.6 上工作时遇到了一些麻烦。我们一直在使用带有独立容器的 APR Native Libraries 的 certificateFile 方法。我们希望将这种方法与嵌入式 Tomcat 一起使用,而不是更改为密钥库方法。我尝试了 Grails 文档,深入研究了 Spring Boot embedded container 文档,但还没有找到可行的解决方案。
我在 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'
但这给了我一个 'resource location may not be null' 错误。我看到的大多数例子和问题在这一点上都已经过时了。是时候问一个关于 Whosebug 的新问题了。提前致谢!
无法使用 openssl certificateKeyFile 方法,即使在 LD_LIBRARY_PATH 上加载了 APR 本机库也是如此。 (我认为如果您编辑 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.
我们最近从使用独立 Tomcat 8 个容器改为使用嵌入式 Tomcat 8 个容器。我们在使用嵌入式容器使 SSL 在 Grails 3.1.6 上工作时遇到了一些麻烦。我们一直在使用带有独立容器的 APR Native Libraries 的 certificateFile 方法。我们希望将这种方法与嵌入式 Tomcat 一起使用,而不是更改为密钥库方法。我尝试了 Grails 文档,深入研究了 Spring Boot embedded container 文档,但还没有找到可行的解决方案。
我在 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'
但这给了我一个 'resource location may not be null' 错误。我看到的大多数例子和问题在这一点上都已经过时了。是时候问一个关于 Whosebug 的新问题了。提前致谢!
无法使用 openssl certificateKeyFile 方法,即使在 LD_LIBRARY_PATH 上加载了 APR 本机库也是如此。 (我认为如果您编辑 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.