1

最近、スタンドアロンの Tomcat 8 コンテナーの使用から組み込みの Tomcat 8 コンテナーの使用に変更しました。埋め込みコンテナーを使用して Grails 3.1.6 で SSL を動作させるのに問題があります。私たちは、スタンドアロン コンテナーを使用する APR ネイティブ ライブラリで 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'

しかし、これにより「リソースの場所がnullではない可能性があります」というエラーが表示されました。私が見るほとんどの例と質問は、現時点ではかなり古いものです。stackoverflow について新たな質問をする時間です。前もって感謝します!

4

1 に答える 1

2

APR ネイティブ ライブラリが LD_LIBRARY_PATH にロードされていても、openssl certificateKeyFile アプローチを使用することはできませんでした。(grails-app/init/myapp/Application.groovy を編集し、Spring のドキュメントに従って追加のコネクタを追加すると、可能になると思います ( http://docs.spring.io/spring-boot/の段落 70.9)。 docs/current/reference/html/howto-embedded-servlet-containers.html ) ですが、これは難しく、org.springframework のソースを読んで、openssl 証明書と APR ネイティブでこれを機能させる方法を理解する必要があります)。私には価値がなかったので、キーストアアプローチを使用してそれを行う方法を次に示します。

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.
于 2016-06-02T17:16:55.290 に答える