2016-05-31 84 views
1

我們最近從使用獨立的Tomcat 8容器變爲使用嵌入式Tomcat 8容器。我們在使用嵌入式容器的Grails 3.1.6上運行SSL時遇到了一些麻煩。我們一直使用APR Native Libraries和獨立容器的certificateFile方法。我們希望使用嵌入式Tomcat保持這種方法,而不是改變爲密鑰存儲方法。我嘗試了Grails文檔,深入Spring Boot嵌入式容器文檔,但尚未找到工作解決方案。如何在Grails 3.1.6+中配置SSL?

我在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上提出一個新問題。提前致謝!

回答

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. 
+0

添加以來編輯「評論必須大於6字符。 'key-store','keystore-password'和'key-password'屬性必須縮進屬於'ssl'部分。花了好幾個小時試圖弄清楚這一點。 – CoconutBandit