Neo4j и LetsEncrypt

Кто-нибудь заставил Neo4j работать с сертификатом LetsEncrypt?

У меня есть обычный веб-сайт, работающий с LetsEncrypt, поэтому я знаю, что мой сертификат в порядке. Neo4j работает, и я могу получить доступ к браузеру Neo4j через https, и я получаю предупреждение о самозаверяющем сертификате.

Я следил за документацией по настройке SSL, но когда я пытаюсь запустить службы, он сразу терпит неудачу. Я даже не получаю никакого вывода в свои журналы, в чем проблема.

myself@localhost:/var/lib/neo4j/certificates/bolt/trusted# service neo4j status
● neo4j.service - Neo4j Graph Database
   Loaded: loaded (/lib/systemd/system/neo4j.service; enabled; vendor preset: enabled)
  Drop-In: /etc/systemd/system/neo4j.service.d
           └─override.conf
   Active: inactive (dead) (Result: exit-code) since Sat 2018-07-21 21:08:37 MDT; 658ms ago
  Process: 19066 ExecStart=/usr/share/neo4j/bin/neo4j console (code=exited, status=1/FAILURE)
 Main PID: 19066 (code=exited, status=1/FAILURE)

Jul 21 21:08:37 Swingset systemd[1]: neo4j.service: Unit entered failed state.
Jul 21 21:08:37 Swingset systemd[1]: neo4j.service: Failed with result 'exit-code'.
Jul 21 21:08:37 Swingset systemd[1]: neo4j.service: Service hold-off time over, scheduling restart.
Jul 21 21:08:37 Swingset systemd[1]: Stopped Neo4j Graph Database.
Jul 21 21:08:37 Swingset systemd[1]: neo4j.service: Start request repeated too quickly.
Jul 21 21:08:37 Swingset systemd[1]: Failed to start Neo4j Graph Database.

Так что я ищу кого-то, кто получил эту работу и мог бы дать мне контрольный список вещей, чтобы перепроверить. Я считаю, что у меня есть правильная структура папок, я думаю, что у меня есть правильные разрешения, я думаю, что neo4j.conf изменен правильно, и я думаю, что у меня есть правильные файлы LetsEncrypt, скопированные в правильные папки и с правильными именами файлов. Но я должен что-то упустить, потому что это не работает.


person Michael Black    schedule 22.07.2018    source источник


Ответы (1)


Забавно, как я делал то же самое сегодня и наткнулся на этот вопрос, пытаясь понять это... Вот что сработало для меня и процедура, которой я следовал, основываясь на инструкциях из Документация Neo4j по ssl-framework.

  • Создайте соответствующую структуру каталогов

    cd /var/lib/neo4j/certificates
    mkdir -p default/revoked default/trusted
    
  • Скопируйте сертификаты letsencrypt в папку neo4j.

    # Copy your server cert to the base dir and the trusted dir of neo4j
    cp $your_cert_dir/cert.pem /var/lib/neo4j/certificates/default/cert.pem
    cp $your_cert_dir/cert.pem /var/lib/neo4j/certificates/default/trusted/cert.pem
    
    # Copy your key to the base dir of neo4j
    cp $your_cert_dir/privkey.pem /var/lib/neo4j/certificates/default/privkey.pem
    
  • Убедитесь, что файлы имеют правильные разрешения

    # To my system, Ubuntu 16.04, it was neo4j:adm
    chown -R neo4j:adm /var/lib/neo4j/certificates/default/
    
  • Убедитесь, что следующие записи в файле конфигурации neo4j (/etc/neo4j/neo4j.conf) выглядят следующим образом:

    # Set the base dir for certificates
    dbms.directories.certificates=/var/lib/neo4j/certificates
    
    # To enable connections from remote servers
    dbms.connectors.default_listen_address=0.0.0.0
    
    # This can remain "OPTIONAL"
    dbms.connector.bolt.tls_level=REQUIRED
    
    # Enable https connector
    dbms.connector.https.enabled=true
    dbms.connector.https.listen_address=:7473
    
    # Set up the policy for the connectors to the default
    bolt.ssl_policy=default
    https.ssl_policy=default
    
    # Create default policy 
    dbms.ssl.policy.default.base_directory=certificates/default
    
    
    # Set the paths for the private key and of the server cert.
    # These must be absolute paths.
    dbms.ssl.policy.default.private_key=/var/lib/neo4j/certificates/default/privkey.pem
    dbms.ssl.policy.default.public_certificate=/var/lib/neo4j/certificates/default/cert.pem
    
    
    # Set up client authentication to "optional" or "none". 
    # If this is left to "default" then the client (a.k.a person who tries to
    # access the web-portal) would need to authenticate with a certificate   
    
    dbms.ssl.policy.default.client_auth=none
    
  • Убедитесь, что следующие порты открыты для брандмауэра сервера.

    • https connector port: 7473
    • Порт http-коннектора: 7474 (Ну, это вы можете заблокировать ;-))
    • порт разъема болта: 7687
  • Перезапустите нео4дж

    service neo4j restart
    
  • Теперь вы сможете подключиться к веб-интерфейсу с помощью https://<your server domain name>:7473. Если вы попробуете с https://IP:7473, то ваш браузер будет жаловаться на то, что сертификат и адрес не совпадают.

К вашему сведению я все еще получаю следующую ошибку в журналах Neo4j, и в настоящее время я пытаюсь ее решить. Тем не менее, все остальное, кажется, работает нормально до сих пор.

    Jul 24 14:13:34 sstest neo4j[18181]: 2018-07-24 12:13:34.556+0000 ERROR Unexpected error detected in bolt session 'fa163efffeefd082-00004705-00000003-81330a20f088cbac-29e11d2a'. The client is unauthorized due to authentication failure.
    Jul 24 14:13:34 sstest neo4j[18181]: org.neo4j.bolt.v1.runtime.BoltConnectionFatality: The client is unauthorized due to authentication failure.
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.v1.runtime.BoltStateMachine.handleFailure(BoltStateMachine.java:742)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.v1.runtime.BoltStateMachine.handleFailure(BoltStateMachine.java:728)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.v1.runtime.BoltStateMachine.access$500(BoltStateMachine.java:62)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.v1.runtime.BoltStateMachine$State$1.init(BoltStateMachine.java:435)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.v1.runtime.BoltStateMachine.init(BoltStateMachine.java:145)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.v1.messaging.BoltMessageRouter.lambda$onInit$0(BoltMessageRouter.java:70)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.runtime.DefaultBoltConnection.processNextBatch(DefaultBoltConnection.java:195)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.runtime.DefaultBoltConnection.processNextBatch(DefaultBoltConnection.java:143)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.runtime.ExecutorBoltScheduler.executeBatch(ExecutorBoltScheduler.java:170)
    Jul 24 14:13:34 sstest neo4j[18181]:         at org.neo4j.bolt.runtime.ExecutorBoltScheduler.lambda$scheduleBatchOrHandleError$2(ExecutorBoltScheduler.java:153)
    Jul 24 14:13:34 sstest neo4j[18181]:         at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1590)
    Jul 24 14:13:34 sstest neo4j[18181]:         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    Jul 24 14:13:34 sstest neo4j[18181]:         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    Jul 24 14:13:34 sstest neo4j[18181]:         at java.lang.Thread.run(Thread.java:748)
person G. Kaklam.    schedule 24.07.2018
comment
СПАСИБО! Я изо всех сил пытался собрать все нужные части головоломки в правильных местах, и я начал косить глазами, глядя на все. - person Michael Black; 25.07.2018