Tomcat 在SSL上访问JIRA时获取空白文件

Tomcat 在SSL上访问JIRA时获取空白文件,tomcat,ssl,jira,Tomcat,Ssl,Jira,我被JIRA的SSL问题缠住了。我已经按照说明在Ubuntu上安装了Jira+SSL,但是在访问时得到了一个空白文件 在空白文件中,我可以看到这些 1503 0300 0202 0a 我不确定我能做什么catalina日志没有报告任何问题。以下 在/conf/server.xml中,我删除了keyalis=jira <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" maxHttpHe

我被JIRA的SSL问题缠住了。我已经按照说明在Ubuntu上安装了Jira+SSL,但是在访问时得到了一个空白文件

在空白文件中,我可以看到这些

1503 0300 0202 0a

我不确定我能做什么catalina日志没有报告任何问题。

以下

在/conf/server.xml中,我删除了keyalis=jira

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
     maxHttpHeaderSize="8192" SSLEnabled="true"
     maxThreads="150" minSpareThreads="25"
     enableLookups="false" disableUploadTimeout="true"
     acceptCount="100" scheme="https" secure="true"
     clientAuth="false" sslProtocol="TLS" useBodyEncodingForURI="true"
     keyAlias="jira" keystoreFile="<JIRA_HOME>/jira.jks" keystorePass="changeit" keystoreType="JKS"/>
跟随

在/conf/server.xml中,我删除了keyalis=jira

<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
     maxHttpHeaderSize="8192" SSLEnabled="true"
     maxThreads="150" minSpareThreads="25"
     enableLookups="false" disableUploadTimeout="true"
     acceptCount="100" scheme="https" secure="true"
     clientAuth="false" sslProtocol="TLS" useBodyEncodingForURI="true"
     keyAlias="jira" keystoreFile="<JIRA_HOME>/jira.jks" keystorePass="changeit" keystoreType="JKS"/>
如何添加SSL证书以保护JIRA安装: 假设: JIRA在Linux机器上的8080端口或其他开放端口上运行 JIRA正在使用tomcat服务器,并且独立于Apache HTTP服务器 在生成CSR和密钥后,您已经拥有有效的CA签名根证书和证书链。 Apache HTTP服务器配置中未启用反向代理设置 您将在/conf/server.xml中看到一点类似的配置

<Service name="Catalina">
    <!-- HTTP Connector with values for scheme, proxyName and proxyPort -->
    <Connector port="8080"
               acceptCount="100"
               scheme="http"
               maxThreads="150"
               minSpareThreads="25"
               connectionTimeout="20000"
               enableLookups="false"
               maxHttpHeaderSize="8192"
               protocol="HTTP/1.1"
               useBodyEncodingForURI="true"
               disableUploadTimeout="true"/>
    <Engine name="Catalina" defaultHost="localhost">
        <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false" useHttpOnly="true">
                <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"
                          factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
                <Manager pathname=""/>
            </Context>

        </Host>

        <Valve className="org.apache.catalina.valves.AccessLogValve"
               pattern="%a %{jira.request.id}r %{jira.request.username}r %t &quot;%m %U%q %H&quot; %s %b %D &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; &quot;%{jira.request.assession.id}r&quot;"/>

    </Engine>
</Service>
要添加SSL证书,首先需要使用keytool java可执行文件将密钥和根证书包含在单个实体中。该文件位于/bin/文件夹中

这里要注意的主要一点是,如果使用keytool导入根证书或链证书而不使用密钥,浏览器可能会给出SSL重叠或一些不同的SSL相关错误。所以第一个要求是 导入具有域密钥的证书

另外,我们需要将key和root.crt文件转换为兼容pkcs12的文件,以便JavaKeyTool能够以自己的格式读取它。否则,您将在浏览器上再次遇到SSL错误

现在在Linux机器上使用openssl以pkcs格式组合密钥和证书,假设您在/bin/文件夹中

root@mailbin]openssl pkcs12-export-in/opt/certificate\u store/root.crt-inkey/home/certificate\u store/domain.key-out server.p12-name jira\u alias-CAfile/home/certificate/gd\u bundle.crt-caname root

输入导出密码:

验证-输入导出密码:

此命令将创建一个文件服务器。p12 u可以给它任何名称。别忘了别名你可以给任何别名,这是一个从列表中获取认证信息的标识符,如果有的话

[root@mailbin]ls

java jjs keytool orbd pack200 policytool rmid rmiregistry server.p12 servertool tnameserv解压200

现在使用keytool将其转换为java可读

[root@mailbin]keytool-importkeystore-deststorepass-destkeypass-destkeystore-server.keystore-srckeystore-server.p12-srcstoretype PKCS12-srcstorepass-alias jira_别名

为了对称性,你可以在任何地方尝试相同的密码,这个密码需要在server.xml中进一步给出

上述命令将使用给定选项创建文件server.keystore

[root@mailbin]ls

java jjs keytool orbd pack200 policytool rmid rmiregistry server.keystore server.p12 servertool tnameserv解包20

现在,您的证书密钥库已准备好保护JIRA

打开/conf/server.xml并在旧连接器之后添加以下新连接器

    <!-- Standard HTTPS Connector  -->
    <Connector
            acceptCount="100"
            SSLEnabled="true"
            connectionTimeout="20000"
            disableUploadTimeout="true"
            enableLookups="false"
            maxHttpHeaderSize="8192"
            maxThreads="150"
            minSpareThreads="25"
            maxSpareThreads="75"
            port="<PORT_NUMBER_ON_WHICH_YOU_WANT_TO_RUN_JIRA_ON_SSL>"
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            scheme="https"
            secure="true"
            clientAuth="false"
            keystoreType="JKS"
            keystoreFile="/opt/atlassian/jira/jre/bin/server.keystore"
            keystorePass="same password here that you had given in keytool"
            useBodyEncodingForURI="true"/>
注释掉旧的HTTP连接器,立即保存server.xml文件并重新启动jira。在指定的端口号上打开jira站点,如:https://domain.com:,检查其是否工作。 或者,在linux控制台上,您可以尝试执行以下命令来检查SSL是否在该端口上工作

$openssl s_客户端-连接本地主机:

它将生成所有证书链,如果工作正常,否则将不会显示任何证书,并将抛出错误

如果您仍然希望在HTTP和HTTPS上访问JIRA,请打开server.xml文件,取消对旧HTTP连接器的注释,并将forwader从HTTP放置到HTTPS。假设您的HTTP连接器正在8080上侦听,HTTPS连接器正在侦听 在端口号9000上,您的server.xml连接器应该如下所示

    <!-- HTTP Connector with values for scheme, proxyName and proxyPort -->
    <!--<Connector port="8080"
               acceptCount="100"
               scheme="http"
               maxThreads="150"
               minSpareThreads="25"
               connectionTimeout="20000"
               enableLookups="false"
               maxHttpHeaderSize="8192"
               protocol="HTTP/1.1"
               useBodyEncodingForURI="true"
               redirectPort="9000"
               disableUploadTimeout="true"/>-->

    <!-- Standard HTTPS Connector  -->
    <Connector
            acceptCount="100"
            SSLEnabled="true"
            connectionTimeout="20000"
            disableUploadTimeout="true"
            enableLookups="false"
            maxHttpHeaderSize="8192"
            maxThreads="150"
            minSpareThreads="25"
            maxSpareThreads="75"
            port="9000"
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            scheme="https"
            secure="true"
            clientAuth="false"
            keystoreType="JKS"
            keystoreFile="/opt/atlassian/jira/jre/bin/server.keystore"
            keystorePass="<PASSWORD_HERE>"
            useBodyEncodingForURI="true"/>
享受SSL

不要忘记在/atlassian jira/WEB-INF/WEB.xml中添加以下行

<security-constraint>
    <web-resource-collection>
        <web-resource-name>all-except-attachments</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspa</url-pattern>
        <url-pattern>/browse/*</url-pattern>
        <url-pattern>/issues/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>
如何添加SSL证书以保护JIRA安装: 假设: JIRA在Linux机器上的8080端口或其他开放端口上运行 JIRA正在使用tomcat服务器,并且独立于Apache HTTP服务器 在生成CSR和密钥后,您已经拥有有效的CA签名根证书和证书链。 Apache HTTP服务器配置中未启用反向代理设置 您将在/conf/server.xml中看到一点类似的配置

<Service name="Catalina">
    <!-- HTTP Connector with values for scheme, proxyName and proxyPort -->
    <Connector port="8080"
               acceptCount="100"
               scheme="http"
               maxThreads="150"
               minSpareThreads="25"
               connectionTimeout="20000"
               enableLookups="false"
               maxHttpHeaderSize="8192"
               protocol="HTTP/1.1"
               useBodyEncodingForURI="true"
               disableUploadTimeout="true"/>
    <Engine name="Catalina" defaultHost="localhost">
        <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
            <Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false" useHttpOnly="true">
                <Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction"
                          factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60"/>
                <Manager pathname=""/>
            </Context>

        </Host>

        <Valve className="org.apache.catalina.valves.AccessLogValve"
               pattern="%a %{jira.request.id}r %{jira.request.username}r %t &quot;%m %U%q %H&quot; %s %b %D &quot;%{Referer}i&quot; &quot;%{User-Agent}i&quot; &quot;%{jira.request.assession.id}r&quot;"/>

    </Engine>
</Service>
要添加SSL证书,首先需要使用keytool java可执行文件将密钥和根证书包含在单个实体中。该文件位于/bin/文件夹中

这里要注意的主要一点是,如果使用keytool导入根证书或链证书而不使用密钥,浏览器可能会给出SSL重叠或一些不同的SSL相关错误。所以第一个要求是 导入具有域密钥的证书

另外,我们需要将key和root.crt文件转换为兼容pkcs12的文件,以便JavaKeyTool能够以自己的格式读取它。否则,您将再次面临SSL 浏览器上的错误

现在在Linux机器上使用openssl以pkcs格式组合密钥和证书,假设您在/bin/文件夹中

root@mailbin]openssl pkcs12-export-in/opt/certificate\u store/root.crt-inkey/home/certificate\u store/domain.key-out server.p12-name jira\u alias-CAfile/home/certificate/gd\u bundle.crt-caname root

输入导出密码:

验证-输入导出密码:

此命令将创建一个文件服务器。p12 u可以给它任何名称。别忘了别名你可以给任何别名,这是一个从列表中获取认证信息的标识符,如果有的话

[root@mailbin]ls

java jjs keytool orbd pack200 policytool rmid rmiregistry server.p12 servertool tnameserv解压200

现在使用keytool将其转换为java可读

[root@mailbin]keytool-importkeystore-deststorepass-destkeypass-destkeystore-server.keystore-srckeystore-server.p12-srcstoretype PKCS12-srcstorepass-alias jira_别名

为了对称性,你可以在任何地方尝试相同的密码,这个密码需要在server.xml中进一步给出

上述命令将使用给定选项创建文件server.keystore

[root@mailbin]ls

java jjs keytool orbd pack200 policytool rmid rmiregistry server.keystore server.p12 servertool tnameserv解包20

现在,您的证书密钥库已准备好保护JIRA

打开/conf/server.xml并在旧连接器之后添加以下新连接器

    <!-- Standard HTTPS Connector  -->
    <Connector
            acceptCount="100"
            SSLEnabled="true"
            connectionTimeout="20000"
            disableUploadTimeout="true"
            enableLookups="false"
            maxHttpHeaderSize="8192"
            maxThreads="150"
            minSpareThreads="25"
            maxSpareThreads="75"
            port="<PORT_NUMBER_ON_WHICH_YOU_WANT_TO_RUN_JIRA_ON_SSL>"
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            scheme="https"
            secure="true"
            clientAuth="false"
            keystoreType="JKS"
            keystoreFile="/opt/atlassian/jira/jre/bin/server.keystore"
            keystorePass="same password here that you had given in keytool"
            useBodyEncodingForURI="true"/>
注释掉旧的HTTP连接器,立即保存server.xml文件并重新启动jira。在指定的端口号上打开jira站点,如:https://domain.com:,检查其是否工作。 或者,在linux控制台上,您可以尝试执行以下命令来检查SSL是否在该端口上工作

$openssl s_客户端-连接本地主机:

它将生成所有证书链,如果工作正常,否则将不会显示任何证书,并将抛出错误

如果您仍然希望在HTTP和HTTPS上访问JIRA,请打开server.xml文件,取消对旧HTTP连接器的注释,并将forwader从HTTP放置到HTTPS。假设您的HTTP连接器正在8080上侦听,HTTPS连接器正在侦听 在端口号9000上,您的server.xml连接器应该如下所示

    <!-- HTTP Connector with values for scheme, proxyName and proxyPort -->
    <!--<Connector port="8080"
               acceptCount="100"
               scheme="http"
               maxThreads="150"
               minSpareThreads="25"
               connectionTimeout="20000"
               enableLookups="false"
               maxHttpHeaderSize="8192"
               protocol="HTTP/1.1"
               useBodyEncodingForURI="true"
               redirectPort="9000"
               disableUploadTimeout="true"/>-->

    <!-- Standard HTTPS Connector  -->
    <Connector
            acceptCount="100"
            SSLEnabled="true"
            connectionTimeout="20000"
            disableUploadTimeout="true"
            enableLookups="false"
            maxHttpHeaderSize="8192"
            maxThreads="150"
            minSpareThreads="25"
            maxSpareThreads="75"
            port="9000"
            protocol="org.apache.coyote.http11.Http11NioProtocol"
            scheme="https"
            secure="true"
            clientAuth="false"
            keystoreType="JKS"
            keystoreFile="/opt/atlassian/jira/jre/bin/server.keystore"
            keystorePass="<PASSWORD_HERE>"
            useBodyEncodingForURI="true"/>
享受SSL

不要忘记在/atlassian jira/WEB-INF/WEB.xml中添加以下行

<security-constraint>
    <web-resource-collection>
        <web-resource-name>all-except-attachments</web-resource-name>
        <url-pattern>*.jsp</url-pattern>
        <url-pattern>*.jspa</url-pattern>
        <url-pattern>/browse/*</url-pattern>
        <url-pattern>/issues/*</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

您应该通过https而不是http访问它。您应该通过https而不是http访问它。