2016-05-31 12 views
1

Wir haben kürzlich von der Verwendung von eigenständigen Tomcat 8-Containern zur Verwendung des eingebetteten Tomcat 8-Containers gewechselt. Wir haben Probleme, SSL mit Grails 3.1.6 mit dem eingebetteten Container zu arbeiten. Wir hatten den certificateFile-Ansatz mit APR Native Libraries mit dem eigenständigen Container verwendet. Wir möchten diesen Ansatz mit dem eingebetteten Tomcat beibehalten, anstatt in den Keystore-Ansatz zu wechseln. Ich habe die Grails-Dokumentation ausprobiert, bin tief in die Spring-Boot-Embedded-Container-Dokumentation gegangen, habe aber noch keine funktionierende Lösung gefunden.Wie konfiguriert man SSL in Grails 3.1.6+?

Ich habe viele verschiedene Konfigurationsansätze in der application.yml ausprobiert. Basierend auf mehrere verschiedenen Stücke von Dokumentation, Quellen usw. mein letzter Versuch war:

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' 

Ich habe auch versucht, diese von der application.yml bis zum Ende hinzufügen:

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' 

aber das gab mir eine "Ressourcenstandort darf nicht null sein" -Fehler. Die meisten Beispiele und Fragen, die ich sehe, sind an diesem Punkt ziemlich veraltet. Zeit, eine neue Frage zu Stackoverflow zu stellen. Danke im Voraus!

Antwort

2

Es war nicht möglich, die Methode openssl certificateKeyFile zu verwenden, selbst wenn die nativen APR-Bibliotheken in LD_LIBRARY_PATH geladen waren. (Ich denke, dass es möglich ist, wenn Sie grails-app/init/myapp/Application.groovy bearbeiten und die Spring Dokumentation für das Hinzufügen eines zusätzlichen Connectors (in Absatz 70.9 von http://docs.spring.io/spring-boot/docs/current/reference/html/howto-embedded-servlet-containers.html), aber das ist schwierig, und Sie müssen die lesen org.springframework-Quellen, um herauszufinden, wie dies mit openssl-Zertifikaten und APR Native funktioniert. Für mich war es das nicht wert, also hier, wie Sie es mit dem Keystore-Ansatz machen.

Ich musste das Zertifikat mit der Tomcat-Keytool-Methode erneut eingeben.

--- 
--- 
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" 

Mein Verfahren zur Herstellung des Zertifikats war:

Dann wurde die application.yml so aussehen aktualisiert, da Änderungen

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

Hinzufügen als Kommentar ‚muss mehr als 6 Figuren'. Die Eigenschaften "Schlüsselspeicher", "Schlüsselspeicherkennwort" und "Schlüsselkennwort" müssen so eingerückt sein, dass sie in den Abschnitt "ssl" fallen. Habe einige gute Stunden damit verbracht, das herauszufinden. – CoconutBandit