一、操作场景
这篇档指导你如何在 Jetty 服务器中安装 SSL 证书。
二、前提条件
·已准备文件远程拷贝软件,例如 WinSCP(建议从网站获取最新版本)。
若你需部署到腾讯云云服务器,建议使用云服务器的文件上传功能。详情请参见 上传文件到云服务器。
·已准备远程登录工具,例如 PuTTY 或者 Xshell(建议从网站获取最新版本)。
·已在当前服务器中安装配置 Jetty 服务。
·安装 SSL 证书前需准备的数据如下:
| 名称 | 说明 |
| 服务器的 IP 地址 | 服务器的 IP 地址,用于 PC 连接到服务器。 |
| 用户名 | 登录服务器的用户名。 |
| 密码 | 登录服务器的密码。 |
三、操作步骤
1. 请在 SSL 证书控制台 中选择你需要安装的证书并单击下载。
2. 在弹出的 “证书下载” 窗口中,服务器类型选择 JKS,单击下载并解压缩 cloud.tencent.com 证书文件包到本地目录。
解压缩后,可获得相关类型的证书文件。其中包含 cloud.tencent.com_jks 文件夹:
·文件夹名称:cloud.tencent.com_jks
·文件夹内容:
·cloud.tencent.com.jks 密钥库
·keystorePass.txt 密码文件(若已设置私钥密码,则无 keystorePass.txt 密码文件)
3. 远程登录 Jetty 服务器。例如,使用 “PuTTY” 工具 登录。
4. 进入部署证书步骤,在 /usr/local/jetty/jetty-distribution-9.4.28.v20200408/etc 目录下执行命令 mkdir cert 创建 cert 文件夹。
5. 使用 “WinSCP” (即本地与远程计算机间的复制文件工具)登录 Jetty 服务器,将已获取到的 cloud.tencent.com.jks 密钥库文件从本地目录拷贝至 cert 文件夹。
6. 编辑 /usr/local/jetty/jetty-distribution-9.4.28.v20200408/etc 目录下的 jetty-ssl-context.xml 文件,如下所示:
<?xml version="1.0"?><!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_3.dtd"><!– ============================================================= –><!– SSL ContextFactory configuration –><!– ============================================================= –><!– To configure Includes / Excludes for Cipher Suites or Protocols see tweak-ssl.xml example at https://www.eclipse.org/jetty/documentation/current/configuring-ssl.html#configuring-sslcontextfactory-cipherSuites–><Configure id="sslContextFactory" class="org.eclipse.jetty.util.ssl.SslContextFactory$Server"> <Set name="Provider"><Property name="jetty.sslContext.provider"/></Set> <Set name="KeyStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.keyStorePath" deprecated="jetty.keystore" default="etc/cert/cloud.tencent.com.jks"/></Set> <Set name="KeyStorePassword"><Property name="jetty.sslContext.keyStorePassword" deprecated="jetty.keystore.password" default="4d5jtdq238j1l"/></Set> <Set name="KeyStoreType"><Property name="jetty.sslContext.keyStoreType" default="JKS"/></Set> <Set name="KeyStoreProvider"><Property name="jetty.sslContext.keyStoreProvider"/></Set> <Set name="KeyManagerPassword"><Property name="jetty.sslContext.keyManagerPassword" deprecated="jetty.keymanager.password" default="4d5jtdq238j1l"/></Set> <Set name="TrustStorePath"><Property name="jetty.base" default="." />/<Property name="jetty.sslContext.trustStorePath" deprecated="jetty.truststore" default="etc/cert/cloud.tencent.com.jks"/></Set> <Set name="TrustStorePassword"><Property name="jetty.sslContext.trustStorePassword" deprecated="jetty.truststore.password"/></Set> <Set name="TrustStoreType"><Property name="jetty.sslContext.trustStoreType"/></Set> <Set name="TrustStoreProvider"><Property name="jetty.sslContext.trustStoreProvider"/></Set> <Set name="EndpointIdentificationAlgorithm"><Property name="jetty.sslContext.endpointIdentificationAlgorithm"/></Set> <Set name="NeedClientAuth"><Property name="jetty.sslContext.needClientAuth" deprecated="jetty.ssl.needClientAuth" default="false"/></Set> <Set name="WantClientAuth"><Property name="jetty.sslContext.wantClientAuth" deprecated="jetty.ssl.wantClientAuth" default="false"/></Set> <Set name="useCipherSuitesOrder"><Property name="jetty.sslContext.useCipherSuitesOrder" default="true"/></Set> <Set name="sslSessionCacheSize"><Property name="jetty.sslContext.sslSessionCacheSize" default="-1"/></Set> <Set name="sslSessionTimeout"><Property name="jetty.sslContext.sslSessionTimeout" default="-1"/></Set> <Set name="RenegotiationAllowed"><Property name="jetty.sslContext.renegotiationAllowed" default="true"/></Set> <Set name="RenegotiationLimit"><Property name="jetty.sslContext.renegotiationLimit" default="5"/></Set> <Set name="SniRequired"><Property name="jetty.sslContext.sniRequired" default="false"/></Set> <!– Example of how to configure a PKIX Certificate Path revocation Checker <Call id="pkixPreferCrls" class="java.security.cert.PKIXRevocationChecker$Option" name="valueOf"><Arg>PREFER_CRLS</Arg></Call> <Call id="pkixSoftFail" class="java.security.cert.PKIXRevocationChecker$Option" name="valueOf"><Arg>SOFT_FAIL</Arg></Call> <Call id="pkixNoFallback" class="java.security.cert.PKIXRevocationChecker$Option" name="valueOf"><Arg>NO_FALLBACK</Arg></Call> <Call class="java.security.cert.CertPathBuilder" name="getInstance"> <Arg>PKIX</Arg> <Call id="pkixRevocationChecker" name="getRevocationChecker"> <Call name="setOptions"> <Arg> <Call class="java.util.EnumSet" name="of"> <Arg><Ref refid="pkixPreferCrls"/></Arg> <Arg><Ref refid="pkixSoftFail"/></Arg> <Arg><Ref refid="pkixNoFallback"/></Arg> </Call> </Arg> </Call> </Call> </Call> <Set name="PkixCertPathChecker"><Ref refid="pkixRevocationChecker"/></Set> –></Configure>
7. 编辑 /usr/local/jetty/jetty-distribution-9.4.28.v20200408/etc 目录下的 jetty-ssl.xml 文件,修改端口为443。如下所示:
<Call name="addConnector"> <Arg> <New id="sslConnector" class="org.eclipse.jetty.server.ServerConnector"> <Arg name="server"><Ref refid="Server" /></Arg> <Arg name="acceptors" type="int"><Property name="jetty.ssl.acceptors" deprecated="ssl.acceptors" default="-1"/></Arg> <Arg name="selectors" type="int"><Property name="jetty.ssl.selectors" deprecated="ssl.selectors" default="-1"/></Arg> <Arg name="factories"> <Array type="org.eclipse.jetty.server.ConnectionFactory"> <!– uncomment to support proxy protocol <Item> <New class="org.eclipse.jetty.server.ProxyConnectionFactory"/> </Item>–> </Array> </Arg> <Set name="host"><Property name="jetty.ssl.host" deprecated="jetty.host" /></Set> <Set name="port"><Property name="jetty.ssl.port" deprecated="ssl.port" default="443" /></Set> <Set name="idleTimeout"><Property name="jetty.ssl.idleTimeout" deprecated="ssl.timeout" default="30000"/></Set> <Set name="acceptorPriorityDelta"><Property name="jetty.ssl.acceptorPriorityDelta" deprecated="ssl.acceptorPriorityDelta" default="0"/></Set> <Set name="acceptQueueSize"><Property name="jetty.ssl.acceptQueueSize" deprecated="ssl.acceptQueueSize" default="0"/></Set> <Get name="SelectorManager"> <Set name="connectTimeout"><Property name="jetty.ssl.connectTimeout" default="15000"/></Set> </Get> </New> </Arg> </Call>
8. 编辑 /usr/local/jetty/jetty-distribution-9.4.28.v20200408 目录下的 start.ini 文件,添加如下内容:
etc/jetty-ssl.xmletc/jetty-ssl-context.xmletc/jetty-https.xml
9. 证书已部署完成,在 jetty 根目录下,执行启动命令 java -jar start.jar,即可使用 https://cloud.tencent.com 访问。
·如果浏览器地址栏显示安全锁标识,则说明证书安装成功。如下:
·如果网站访问异常,可参考以下常见问题解决方案进行处理:
·无法使用 HTTPS 访问网站
·部署 SSL 证书后,浏览器提示 “网站连接不安全”
·访问站点提示连接不安全?
·SSL 证书过期后重新申请部署依然提示 HTTPS 不安全?
·在服务器上部署 SSL 证书后访问资源出现 404 报错
四、注意事项
证书部署成功后,使用 https://cloud.tencent.com 访问若显示如下:
解决方案:你可以将 /usr/local/jetty/jetty-distribution-9.4.28.v20200408/demo-base/webapps 目录下的 ROOT 文件复制到 /usr/local/jetty/jetty-distribution-9.4.28.v20200408/webapps 目录下,重启 jetty,即可访问成功。
注意:操作过程如果出现问题,请你 联系我们。