2

我有 Apache OpenMeetings 4.0.4 巫婆 Apache/2.2.22 作为代理。

在 OM 的 conf/red5.properties 我有

http.port=8080

我想做两件事:

  1. 重定向 HTTP (80) -> HTTPS (443)

  2. 将 HTTP (8080) 重定向到 HTTPS (443)

我的 /etc/apache2/sites-avilable/default conf 是:

<VirtualHost *:80>
    ServerName domain.test-test.eu
    ServerAlias domain.test-test.eu

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

<VirtualHost *:8080>
    ServerName domain.test-test.eu
    ServerAlias domain.test-test.eu

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

我的 /etc/apache2/sites-avilable/default-ssl conf 是:

<VirtualHost *:443>
    ServerName domain.test-test.eu
    ServerAlias domain.test-test.eu

    ProxyRequests Off
    ProxyPreserveHost On

    ProxyPass / http://localhost:8080/
    ProxyPassReverse / http://localhost:8080/

    SSLEngine On
    SSLCerificateFile /etc/apache2/certs/collaboration.crt
    SSLCerificateKeyFile /etc/apache2/certs/collaboration.key
    SSLCerificateChainFile /etc/apache2/certs/chain.pem
</VirtualHost>

当我输入http://domain.test-test.eu/时,它会将我重定向到https://domain.test-test.eu

当我输入http://192.168.XXX.YYY时,它会将我重定向到https://192.168.XXX.YYY

但是当我输入http://192.168.XXX.YYY:8080http://domain.test-test.eu:8080时,它不会将我重定向到https://192.168.XXX.YYYhttps:// domain.test-test.eu/。页面打开(没有 HTTPS)。

第二个问题是,在 OM 的日志中我可以看到 CSRF 信息,但我无法通过 HTTPS 登录。

来自 OM 日志的信息:

[http-nio-0.0.0.0-8080-exec-10] INFO o.a.w.p.h.CsrfPreventionRequestCycleListener - Possible CSRF attack, request URL: http://192.168.XXX.YYY/openmeetings/wicket/bookmarkable/org.apache.openmeetings.web.pages.auth.SignInPage, Origin: https://192.168.XXX.YYY, action: aborted with error 400 Origin does not correspond to request

我应该如何更改 Apache 设置以使其正常工作?

4

3 回答 3

1

恐怕无法设置“将 HTTP (8080) 重定向到 HTTPS (443)”

如果您在端口 8080 上运行 OpenMeetings,则不能将其用于 Apache,反之亦然。Internet 端口应该由 OM 或 Apache 独占使用,而不是两者兼有。

我会在 FW 级别关闭端口 8080 以拒绝直接访问 OM。(请删除规则,<VirtualHost *:8080>否则 OM 将无法以Port already in use消息开头)

现在根据 CSRF:

您需要修改conf/jee-container.xml并添加以下属性

<property name="secure" value="true" />

阻止<!-- Tomcat without SSL enabled -->之前<property name="connectionProperties">

这应该可以解决您的问题

但是 OpenMeetings 不适用于此配置....

因为您还需要代理 WebSockets ....

所以你还需要 mod_rewrite 和 mod_proxy_wstunnel

那么您需要添加以下部分:

RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:8080/$1 [P,L]
RedirectMatch ^/$ https://domain.test-test.eu/openmeetings

此外,您可能希望为您的 RTMP 流量执行隧道,这将需要特殊规则open, send, idle and close

以下是 Apache 2.4 的最终配置:

<VirtualHost *:443>
  ServerName domain.test-test.eu

  ## Vhost docroot
  DocumentRoot "/var/www/"

  ## Directories, there should at least be a declaration for /var/www/

  <Directory "/var/www/">
    Options Indexes FollowSymLinks MultiViews
    AllowOverride None
    Require all granted
  </Directory>

  ## Logging
  ErrorLog "/var/log/apache2/domain.test-test.eu-ssl-error.log"
  ServerSignature Off
  CustomLog "/var/log/apache2/domain.test-test.eu.http_access.log" combined

  ## SSL directives
  SSLEngine on
  SSLCertificateFile      "/_certs_path_/domain.test-test.eu/fullchain.pem"
  SSLCertificateKeyFile   "/_certs_path_/domain.test-test.eu/privkey.pem"
  SSLCACertificatePath    "/_CA_certs_path_"

###      OpenMeetings    ###
## Custom fragment
RewriteEngine On
RewriteCond %{HTTP:Connection} Upgrade [NC]
RewriteCond %{HTTP:Upgrade} websocket [NC]
RewriteRule /(.*) ws://localhost:5080/$1 [P,L]
RedirectMatch ^/$ https://domain.test-test.eu/openmeetings
ProxyPreserveHost On

<Location /openmeetings>
  Require all granted      
  ProxyPass http://localhost:5080/openmeetings
  ProxyPassReverse http://localhost:5080/openmeetings
  RewriteEngine On
  RewriteRule ^/(.*) http://localhost:5080/$1 [P]
</Location>
<Location /open>
  Require all granted
  ProxyPass http://localhost:5080/open
  ProxyPassReverse http://localhost:5080/open
</Location>
<Location /send>
  Require all granted
  ProxyPass http://localhost:5080/send
  ProxyPassReverse http://localhost:5080/send
</Location>
<Location /idle>
  Require all granted
  ProxyPass http://localhost:5080/idle
  ProxyPassReverse http://localhost:5080/idle
</Location>
<Location /close>
  Require all granted
  ProxyPass http://localhost:5080/close
  ProxyPassReverse http://localhost:5080/close
</Location>

</VirtualHost>

按预期为我工作:)

于 2018-08-10T09:25:05.723 回答
0

在“默认”文件中,我有:

<VirtualHost *:80>
    ServerName domain.test-test.eu
    ServerAlias domain.test-test.eu

    RewriteEngine On
    RewriteCond %{HTTPS} off
    RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
</VirtualHost>

因此,当 smb 键入http://domain.test-test.eu时,它会将其重定向到https://domain.test-test.eu

我的“default-ssl”文件几乎和你的一样(我使用 8080/tcp 进行 OM)。而且我正在为 OM 使用自签名证书(现在他们没有为 CN=domain.test-test.eu 签名,而是为 CN=testname.eu - 我会在 OM 工作后更改它)。

不幸的是,这个配置不起作用。我可以看到周围有两个黑点。可能是因为浏览器过时(FF 版本为 52.4.1 和 Chromium 51.0.2704.79)或站点证书错误?

于 2018-08-13T13:01:39.860 回答
0

Maxim 提供的 apache 配置正在运行。谢谢马克西姆!

于 2018-08-21T12:21:06.963 回答