web-dev-qa-db-ja.com

Tomcat8ubuntuサーバーの証明書のアクセス許可を暗号化しましょう

私はubuntuサーバーVPSのApacheHTTPDとTomcatサービスの両方に証明書を暗号化しようとしています。

Apacheの構成を調べているletsencryptに保存された証明書がある場所を見つけました。これは、certbootスクリプトによって書き込まれ、Apacheはこの証明書でうまく機能しています。

Tomcat server.xml構成に同じリンクを使用しますが、ログにアクセス許可拒否エラーが表示されます。

SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-apr-8443"]
Java.lang.Exception: Unable to load certificate key /etc/letsencrypt/live/mysite.org/privkey.pem (error:0200100D:system library:fopen:Permission denied)
        at org.Apache.Tomcat.jni.SSLContext.setCertificate(Native Method)
        at org.Apache.Tomcat.util.net.AprEndpoint.bind(AprEndpoint.Java:657)
        at org.Apache.Tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.Java:742)
        at org.Apache.coyote.AbstractProtocol.init(AbstractProtocol.Java:458)
        at org.Apache.catalina.connector.Connector.initInternal(Connector.Java:960)
        at org.Apache.catalina.util.LifecycleBase.init(LifecycleBase.Java:102)
        at org.Apache.catalina.core.StandardService.initInternal(StandardService.Java:568)
        at org.Apache.catalina.util.LifecycleBase.init(LifecycleBase.Java:102)
        at org.Apache.catalina.core.StandardServer.initInternal(StandardServer.Java:851)
        at org.Apache.catalina.util.LifecycleBase.init(LifecycleBase.Java:102)
        at org.Apache.catalina.startup.Catalina.load(Catalina.Java:580)
        at org.Apache.catalina.startup.Catalina.load(Catalina.Java:603)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:498)
        at org.Apache.catalina.startup.Bootstrap.load(Bootstrap.Java:310)
        at org.Apache.catalina.startup.Bootstrap.main(Bootstrap.Java:484)

Oct 11, 2017 9:40:07 AM org.Apache.catalina.core.StandardService initInternal
SEVERE: Failed to initialize connector [Connector[HTTP/1.1-8443]]
org.Apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8443]]
        at org.Apache.catalina.util.LifecycleBase.init(LifecycleBase.Java:107)
        at org.Apache.catalina.core.StandardService.initInternal(StandardService.Java:568)
        at org.Apache.catalina.util.LifecycleBase.init(LifecycleBase.Java:102)
        at org.Apache.catalina.core.StandardServer.initInternal(StandardServer.Java:851)
        at org.Apache.catalina.util.LifecycleBase.init(LifecycleBase.Java:102)
        at org.Apache.catalina.startup.Catalina.load(Catalina.Java:580)
        at org.Apache.catalina.startup.Catalina.load(Catalina.Java:603)
        at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:62)
        at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
        at Java.lang.reflect.Method.invoke(Method.Java:498)
        at org.Apache.catalina.startup.Bootstrap.load(Bootstrap.Java:310)
        at org.Apache.catalina.startup.Bootstrap.main(Bootstrap.Java:484)
Caused by: org.Apache.catalina.LifecycleException: Protocol handler initialization failed
        at org.Apache.catalina.connector.Connector.initInternal(Connector.Java:964)
        at org.Apache.catalina.util.LifecycleBase.init(LifecycleBase.Java:102)
        ... 12 more
Caused by: Java.lang.Exception: Unable to load certificate key /etc/letsencrypt/live/mysite.org/privkey.pem (error:0200100D:system library:fopen:Permission denied)
        at org.Apache.Tomcat.jni.SSLContext.setCertificate(Native Method)
        at org.Apache.Tomcat.util.net.AprEndpoint.bind(AprEndpoint.Java:657)
        at org.Apache.Tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.Java:742)
        at org.Apache.coyote.AbstractProtocol.init(AbstractProtocol.Java:458)
        at org.Apache.catalina.connector.Connector.initInternal(Connector.Java:960)
        ... 13 more

Oct 11, 2017 9:40:07 AM org.Apache.catalina.startup.Catalina load

許可を調べて、私はこれを見つけました:

root@myvps:~# ls -la /etc/letsencrypt/live/mysite.org/
total 12
drwxr-xr-x 2 root root 4096 Sep 20 06:30 .
drwx------ 4 root root 4096 May 23 07:27 ..
lrwxrwxrwx 1 root root   39 Sep 20 06:30 cert.pem -> ../../archive/mysite.org/cert3.pem
lrwxrwxrwx 1 root root   40 Sep 20 06:30 chain.pem -> ../../archive/mysite.org/chain3.pem
lrwxrwxrwx 1 root root   44 Sep 20 06:30 fullchain.pem -> ../../archive/mysite.org/fullchain3.pem
lrwxrwxrwx 1 root root   42 Sep 20 06:30 privkey.pem -> ../../archive/mysite.org/privkey3.pem
-rw-r--r-- 1 root root  543 May 23 07:27 README
root@myvps:~# ls -la /etc/letsencrypt/archive/mysite.org/
total 56
drwxr-xr-x 2 root root 4096 Sep 20 06:30 .
drwx------ 4 root root 4096 May 23 07:27 ..
-rw-r--r-- 1 root root 1818 May 23 07:27 cert1.pem
-rw-r--r-- 1 root root 1814 Jul 22 06:30 cert2.pem
-rw-r--r-- 1 root root 1814 Sep 20 06:30 cert3.pem
-rw-r--r-- 1 root root 1647 May 23 07:27 chain1.pem
-rw-r--r-- 1 root root 1647 Jul 22 06:30 chain2.pem
-rw-r--r-- 1 root root 1647 Sep 20 06:30 chain3.pem
-rw-r--r-- 1 root root 3465 May 23 07:27 fullchain1.pem
-rw-r--r-- 1 root root 3461 Jul 22 06:30 fullchain2.pem
-rw-r--r-- 1 root root 3461 Sep 20 06:30 fullchain3.pem
-rw-r--r-- 1 root root 1704 May 23 07:27 privkey1.pem
-rw-r--r-- 1 root root 1704 Jul 22 06:30 privkey2.pem
-rw-r--r-- 1 root root 1704 Sep 20 06:30 privkey3.pem

私の知る限り、lsコマンドに対するこの回答は、すべての人にシンボリックリンクと実ファイルの読み取り権限があることを示しています。私は正しいですか?では、証明書を/etc/letsencrypt/live/mysite.org/cert.pemにポイントしているのに、Tomcatがアクセス許可について不平を言っているのはなぜですか?

1
Tobia

問題は、/ etc/setsencrypt/liveおよび/ etc/letsencrypt/archiveフォルダーがアクセス許可のあるrootによってのみアクセス可能であるということでした7。また、内部ファイルがアクセス可能である場合、Tomcatは、トラバース中に親フォルダーのアクセス許可のためにそれらを読み取ることができません。

/ etc/testsencrypt/liveおよび/ etc/letsencrypt/archiveのフォルダー権限を75に変更し、Tomcatをユーザーグループルートに追加する必要があります。これで機能します。

これらのフォルダのグループ所有者を、ssl-certなどのルートグループ以外に変更することをお勧めします。

1
Tobia