Page tree
Skip to end of metadata
Go to start of metadata

中文标题【通过 SSL 或 HTTPS 运行 Confluence】

Atlassian 应用可以通过 HTTPS 进行访问,但是 Atlassian 并不提供有关访问的支持服务,同时 Atlassian 不能保证能够提供所有的支持

  • 如果你的 assistance 在证书转换方面有相关服务的需求,请咨询你证书的提供商来获得他们的帮助。
  • 如果你在 assistance 证书配置上行有相关需求,请到 Atlassian Community 中提问。

这个页面提供了如何在 Confluence 中启用访问 HTTPS(HTTS Secure)的一些基本信息,通过这样的配置你的 Confluence 登录和数据传输将会采用加密的方式进行。这对你的 Confluence 的安全性将会有一些提升,用户登录使用的用户名和密码数据是加密的,能够更好的保障系统的安全性。

在本文章中,我们使用 'SSL' 来定义在加密传输中参考使用的加密协议。在很多时候,这个加密协议是 TLS

本页面中的内容:

相关主题:


这个指南包含了在 Tomcat 中使用 SSL 的相关信息,Tomcat 是捆绑在 Confluence 服务器上一起发布的。

如果你决定使用 SSL 并且使用服务器的反向代理,请参考  Apache with mod_proxy 或 Running Confluence behind NGINX with SSL 页面中的内容,来确定如何在你的 Web 服务器上使用 SSL。

你需要使用 JDK 1.8 来完成安装过程中的一些步骤。JER 的版本不足以支持所有的安装。

1. 创建或请求一个 SSL 证书

在启用 HTTPS 之前,你需要一个有效的证书,如果你已经有了一个有效的证书,你可以直接跳过这个步骤,进入 step 2

你可以创建一个自签名的证书,或者从信任的 Certificate Authority 中获得一个证书。

如果你的项目小组计划使用 Confluence 服务器移动 app。你需要你的证书是从信任的证书签发机构签发的。你不能使用自签名的证书或者从一个不信任的机构获得的证书,或者自由 CA。

选项 1: 创建一个自签名证书

当你需要进行加密,但是你并不需要对网站的的请求校验的话,自签名证书能够帮助你完成这个。在通常的情况下,你可以在你的测试环境下签发你的自签名证书,你也可以在你公司内部的网络上签发自签名证书。

因为证书不是信任的组织签发的(CA),用户可能会收到站点不被信任,并且提供一个步骤让用户先确定,才能访问网站的信息。这个通常是在第一次访问网站的时候出现的提示。如果你使用的 Confluence 的移动 app 的话,用户不能通过你的自签名证书访问你的 Confluence 站点。

在这个情况下,我们需要使用 Java 的 keytool 工具包。这个工具包是包含在 JDK 中的。如果你对命令行工具并不是十分熟悉的话,你可以考虑使用 KeyStore Explorer 工具。

使用 keytool 来创建一个自签名证书:

  1. 从命令行中,为你的操作系统运行正确的命令:

    Windows
    "%JAVA_HOME%\bin\keytool" -genkeypair -keysize 2048 -alias tomcat -keyalg RSA -sigalg SHA256withRSA
    Linux (and MacOS)
    $JAVA_HOME/bin/keytool -genkeypair -keysize 2048 -alias tomcat -keyalg RSA -sigalg SHA256withRSA
  2. 当出现提示后,为你的证书创建 密码(password ),私有 key。

    • 仅使用数字和英文字符。如果你使用了特殊字符,Tomcat 可能会出现错误。
    • 请记录你创建的密码,在下一步中你需要使用到你创建的密码。
    • 默认的密码是 'changeit'。

  3. 根据提示来确定证书的细节。这些信息被用来构造 X.500 实体中的 Distinguished Name (DN) 。

    • First and last name:这个不是你的名字,这个是 Common Name (CN),例如 'confluence.example.com'。CN 必须与 Confluence 使用的域名完全对应,否则 Tomcat 将不能使用你签名的证书。
    • Organizational unit:这个是证书使用的部门或者小组,例如 'marketing'。
    • Organization:是你公司的名字,例如 'SeeSpaceEZ'。
    • City, State / province, country code:这个是你公司的地理位置,例如 Sydney, NSW, AU。

  4. 输出将会如下所示。输入 'y' 来确定你输入的内容。

    CN=confluence.example.com, OU=Marketing, O=SeeSpaceEZ, L=Sydney, ST=NSW, C=AU
  5. 当被询问为 'tomcat' 准备使用的 密码(password )的时候,输入你第二步中输入的密码(在输入密码后单击回车)。
    • 'tomcat' 是你在 keytool 命令行中输入的别名,在这里用来对你提示。
    • 你 keystore 实例必须和你的私有 key 有相同的密码。这个是 Tomcat 服务器要求的。

  6. 你的证书现在已经可以用了,进入 下面 的第二步。

选项 2: 使用 Certificate Authority  签发的证书(推荐)

在生产环境中,你需要使用从 Certificate Authority (CA) 签发的证书。下面的内容是从 Tomcat documentation 中拷贝出来的。

首先你需要创建本地证书,然后基于你创建的本地证书再创建一个 'certificate signing request' (CSR) 。你需要提交 CSR 到你的选择的 CA 提供商上进行收取。CA 将会通过 CSR 将授权后的证书发给你。

  1. 使用 Java 的 keytool 工具来创建一个本地证书(请按照上面第一步所描述的内容)。
  2. 从命令中,将会返回下面的命令工具来创建所需要前面的证书。

    keytool -certreq -keyalg RSA -alias tomcat -file certreq.csr -keystore <MY_KEYSTORE_FILENAME>

    替换 <MY_KEYSTORE_FILENAME> 为路径和你本地证书创建 .keystore 的文件名。

  3. 提交创建的文件为 certreq.csr 到你希望进行授权的 CA。
    (info) 请参考 CA 的文档来找到如何进行这个操作。
  4. CA 将会发个你已经签名好的证书。
  5. 导入新证书到你的本地的 keystore:

    keytool -importcert -alias tomcat -keystore <MY_KEYSTORE_FILENAME> -file <MY_CERTIFICATE_FILENAME>

    一些 CA 可能要求你在安装你的证书之前先安装一个中间人证书。你应该按照 CA  提供的文档来完成你本地证书的成功安装。

如果你使用的是 Verisign 或 GoDaddy,然后你收到了错误的信息,你可能需要将 PKCS12 和你的私钥(private key)同时导出。

  1. 首先,删除添加到 keystore 中的所有 key:

    keytool -delete -alias tomcat -keystore <MY_KEYSTORE_FILENAME>
  2. 然后导出为 PKCS12 格式:

    openssl pkcs12 -export -in <MY_CERTIFICATE_NAME> -inkey <MY_PRIVATEKEY_NAME> -out <MY_PKC12_KEYSTORE_NAME> -name tomcat -CAfile <MY_ROOTCERTIFICATE_NAME-alsoCalledBundleCertificateInGoDaddy> -caname root
  3. 然后导入 PKCS12 到 jks 中:

    keytool -importkeystore -deststorepass <MY_DESTINATIONSTORE_PASSWORD> -destkeypass <MY_DESTINATIONKEY_PASSWORD> -destkeystore <MY_KEYSTORE_FILENAME> -srckeystore <MY_PKC12_KEYSTORE_NAME> -srcstoretype PKCS12 -srcstorepass <MY_PKC12_KEYSTORE_PASSWORD> -alias tomcat


2. 修改你 Confluence 的 server.xml 文件

下一步你需要配置 Confluence 来使用 HTTPS:

  1. 编辑 <install-directory>/conf/server.xml 文件。
  2. 取消注释下面的行:

    <Connector port="8443" maxHttpHeaderSize="8192"
        maxThreads="150" minSpareThreads="25"                    
        protocol="org.apache.coyote.http11.Http11NioProtocol"
        enableLookups="false" disableUploadTimeout="true"
        acceptCount="100" scheme="https" secure="true"
        clientAuth="false" sslProtocols="TLSv1,TLSv1.1,TLSv1.2"      
           sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" SSLEnabled="true"
        URIEncoding="UTF-8" keystorePass="<MY_CERTIFICATE_PASSWORD>"/>
  3. 替换 <MY_CERTIFICATE_PASSWORD> 为你在证书中使用的密码。
  4. 确定 attribute-value 匹配 SSLEnabled="true" 是连接元素的一部分,如上面所示。如果这个特性没有被显示出来,尝试访问 Confluence 可能会遇到超时错误。
  5. 保存服务器配置文件。

(warning) 不要删除 http 连接器中的备注,Synchrony 代理被从来进行健康检查,这个检查还是通过 HTTP 访问的。如果你不希望包括  http 连接器。你可以使用 synchrony.proxy.healthcheck.disabled 系统属性来禁用健康检查。

不应该禁用内部的 Synchrony proxy(通过设置 synchrony.proxy.enabled 系统属性为 false),这个我们已知了在 Tomcat 确定 SSL 的时候将会导致问题。

(info) 默认针对 Confluence 的连接器端口为 8090.

3. 确定你的证书路径

在默认的情况下,Tomcat 希望 keystore 文件被命名为 .keystore 文件,同时这个文件应该放置在 Tomcat 运行的 home 目录中(这个目录可能与你自己的 Home 目录的路径不同)。这个配置的意思是,在默认情况下 Tomcat 将会到下面 2 个位置中去检查你的 SSL 证书:

  • On Windows: C:\users\#CURRENT_USER#\.keystore
  • On OS X and UNIX-based systems: ~/.keystore

不要保存你的证书 keystore 文件到你的 Confluence 目录下面。这个目录文件将会在你升级的时候删除。

如果你的证书文件没有放置到默认路径下的时候,你可能决定移动你的证书文件到一个自定义的路径。你需要按照下面的提示升级更新你的服务器配置文件,这样 Tomcat 才能够正常找到这个证书。

  1. 编辑  <confluence-install-directory>/conf/server.xml
  2. 添加属性 keystoreFile="<MY_CERTIFICATE_LOCATION>" 到 Connectorelement,然后这个元素看起来如下所示:

            <Connector port="8443" maxHttpHeaderSize="8192"
                       maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
                       enableLookups="false" disableUploadTimeout="true"
                       acceptCount="100" scheme="https" secure="true"
                       clientAuth="false" sslProtocol="TLS" SSLEnabled="true"
                       URIEncoding="UTF-8" keystorePass="<MY_CERTIFICATE_PASSWORD>"
                       keystoreFile="<MY_CERTIFICATE_LOCATION>"/>
    
  3. 替换文本 <MY_CERTIFICATE_LOCATION> 为你证书的路径,包括 .keystore 文件的路径全名。
  4. 保存你的配置文件。

4. 为 HTTPS 修改你的 Confluence 基础 URL

  1. 在你的浏览器中,进入  > 基本配置(General Configuration)
  2. 单击 编辑(Edit)
  3. 修改服务器的基础 URL 为 HTTPS。请参考文档  configuring the server base URL 来获得更多配置信息。
  4. 重启 Confluence 然后通过 https://<MY_BASE_URL>:8443/ 访问 Confluence。

5. 重定向所有的 URLS 到 HTTPS 的安全考虑

尽管现在 HTTPS 现在已经激活并且可用了。老的 HTTP URLs (http://localhost:8090)还是可以访问的。现在你需要重定向所有 URLs 到他们的 HTTPS 链接中。你可以通过在  web.xml 文件中添加加安全常量来达到这个目的。这个能够让 Tomcat 将不是 SSL 端口的访问重定向到 SSL。

  1. 检查你的 Confluence 站点的用户是否使用了 RSS macro。如果你的站点启用了 RSS macro 宏,你可能需要在防火墙规则中配置 Confluence URL 重定向,而不需要通过修改 web.xml 文件达到这个目的。请跳过下面的步骤,然后访问 RSS Feed Macro 页面来获得更多信息。
  2. 否则,编辑  <CONFLUENCE_INSTALLATION>/confluence/WEB-INF/web.xml 文件中的内容。
  3. 添加下面的定义到文件的页尾,但是需要在 </web-app> 标签的前面

    <security-constraint>
      <web-resource-collection>
        <web-resource-name>Restricted URLs</web-resource-name>
        <url-pattern>/</url-pattern>
      </web-resource-collection>
      <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
      </user-data-constraint>
    </security-constraint>
    
  4. 重启 Confluence 然后访问 http://localhost:8090,现在你应该是直接重定向到 https://localhost:8443/login.action 中了。

(info) Confluence 有 2 个 web.xml 文件。另一个文件在 <CONFLUENCE_INSTALLATION>/conf/web.xml。请仅仅按照上面描述的内容在 <CONFLUENCE_INSTALLATION>/confluence/WEB-INF/web.xml 中进行修改。

备注

  • 在创建证书时候的背景信息: 'keytool -genkeypair' 命令将会创建秘钥对,包括公钥和关联的私钥,然后存储到  keystore 中。这个命令打包公钥为  X.509 v3 自签名证书,同时存储为证书链中的单一元素。这个证书链和私钥同时存储为一个新的 keystore 实例。是通过你在命令行中指定的别名进行识别的。Java SE documentation 能帮你更好的使用这个工具。
  • 自定义 SSL 端口:如果你修改了你的 SSL 连接器运行的默认端口(8443),你必须需要更新标注 HTTPS 连接的 redirectPort 属性来映射到新的 SSL 端口。Tomcat 需要这些信息才能知道针对访问 HTTPS 应该重定向到那个端口。
  • 同一主机的多实例:当你在同一主机中运行了多个实例,对地址(address )的确定非常重要,这个属性定义在 <CONFLUENCE_INSTALLATION>/conf/server.xml 文件中,默认的连接器将会列出所有可用的网络接口,因此指定地址将会阻止在同一主机中运行相同端口中的连接器的冲突。请参考 Tomcat 连接器的文档来获得有关地址属性的更多信息: https://tomcat.apache.org/tomcat-8.0-doc/config/http.html

    <Connector port="8443" address="your.confluence.url.com"  maxHttpHeaderSize="8192"
      maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
      enableLookups="false" disableUploadTimeout="true"
      acceptCount="100" scheme="https" secure="true"
      clientAuth="false" sslProtocol="TLS" SSLEnabled="true"
      URIEncoding="UTF-8" keystorePass="<MY_CERTIFICATE_PASSWORD>"
      keystoreFile="<MY_CERTIFICATE_LOCATION>"/>
    
  • HTTPS 必须在你全站点配置:HTTPS 不能仅加密一个独立的页面或者空间。
  • 在你对 Confluence 进行升级之前:对你修改过的 server.xml 和 web.xml 文件进行记录。每一升级完成后,你都需要对你修改过的配置文件进行重新配置。最好还是手动添加,而不是将整个文件复制粘贴。

问题解决

  • 有关 Internet Explorer 不能下载附件的问题,将全站点应用 SSL 将会可能导致 IE 不能正确的下载附件。要修复这个问题,请编辑 <CONFLUENCE_INSTALLATION>/conf/server.xml 然后添加下面的行到  <Context ... />元素:

    <Valve className="org.apache.catalina.authenticator.NonLoginAuthenticator"
           disableProxyCaching="true" securePagesWithPragma="false" />
  • No labels