专栏首页每天一个小技巧Jetty 服务器证书安装
原创

Jetty 服务器证书安装

操作场景

本文档指导您如何在 Jetty 服务器中安装 SSL 证书。

说明:

  • 本文档以证书名称 cloud.tencent.com 为例。
  • Jetty 版本以 jetty-distribution-9.4.28.v20200408 为例。
  • 当前服务器的操作系统为 CentOS 7,由于操作系统的版本不同,详细操作步骤略有区别。

前提条件

  • 已准备文件远程拷贝软件,例如 WinSCP(建议从官方网站获取最新版本)。
  • 已准备远程登录工具,例如 PuTTY 或者 Xshell(建议从官方网站获取最新版本)。
  • 已在当前服务器中安装配置 Jetty 服务。
  • 安装 SSL 证书前需准备的数据如下:名称说明服务器的 IP 地址服务器的 IP 地址,用于 PC 连接到服务器。用户名登录服务器的用户名。密码登录服务器的密码。

注意:

  • 在腾讯云官网购买的云服务器,您可以登录 云服务器控制台 获取服务器 IP 地址、用户名及密码。
  • 当您申请 SSL 证书时选择了 “粘贴 CSR” 方式,则不提供 Tomcat 证书文件的下载,需要您通过手动转换格式的方式生成密钥库。其操作方法如下:
    • 访问 转换工具
    • 将 Nginx 文件夹中的证书文件和私钥文件上传至转换工具中,并填写密钥库密码,单击【提交】,转换为 jks 格式证书。
  • 当前 Jetty 服务器安装在 /usr/local/jetty 目录下。

操作步骤

  1. 已在 SSL 证书管理控制台 中下载并解压缩 cloud.tencent.com 证书文件包到本地目录。 解压缩后,可获得相关类型的证书文件。其中包含 Tomcat 文件夹和 CSR 文件:
    • 文件夹名称:Tomcat
    • 文件夹内容
      • cloud.tencent.com.jks 密钥库
      • keystorePass.txt 密码文件(若已设置私钥密码,则无 keystorePass.txt 密码文件)
    • CSR 文件内容cloud.tencent.com.csr 文件说明: CSR 文件是申请证书时由您上传或系统在线生成的,提供给 CA 机构。安装时可忽略该文件。
  2. 远程登录 Jetty 服务器。例如,使用 “PuTTY” 工具 登录。
  3. 进入部署证书步骤,在 /usr/local/jetty/jetty-distribution-9.4.28.v20200408/etc 目录下执行命令 mkdir cert 创建 cert 文件夹。
  4. 使用 “WinSCP” (即本地与远程计算机间的复制文件工具)登录 Jetty 服务器,将已获取到的 cloud.tencent.com.jks 密钥库文件从本地目录拷贝至 cert 文件夹。
  5. 编辑 /usr/local/jetty/jetty-distribution-9.4.28.v20200408/etc 目录下的 jetty-ssl-context.xml 文件,如下所示:说明:
    • KeyStorePath:默认值 default 请填写证书存放的路径。
    • KeyStorePassword:默认值 default 请填写密钥库密码,指定 keystore 的密码。申请证书时若设置了私钥密码,请填写私钥密码;若申请证书时未设置私钥密码,请填写 Tomcat 文件夹中 keystorePass.txt 文件的密码。
    • KeyManagerPassword:请填写 Tomcat 文件夹中 keystorePass.txt 文件的密码。
    • TrustStorePath:默认值 default 请填写证书存放的路径。

    <?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" http://www.sina.com.cn/mid/search.shtml?q=%E7%99%BE%E5%BA%A6%E6%8E%92%E5%90%8D%E4%BB%A3%E5%81%9A%E6%89%A3120280279class="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>

  6. 编辑 /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>
  7. 编辑 /usr/local/jetty/jetty-distribution-9.4.28.v20200408 目录下的 start.ini 文件,添加如下内容: etc/jetty-ssl.xml etc/jetty-ssl-context.xml etc/jetty-https.xml
  8. 证书已部署完成,在 jetty 根目录下,执行启动命令 java -jar start.jar,即可使用 https://cloud.tencent.com 访问。

注意事项

证书部署成功后,使用 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,即可访问成功。

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何通过VBA代码实现禁止用户打印Excel工作表?保护隐私必备技能

    一般情况下,为了保护Microsoft Excel工作簿的安全性,会对工作簿进行加密处理,这是保护工作薄安全性的方法之一。如果通过打印的方法,工作簿的安全性还是...

    雷雷怕蕾蕾
  • 每天 3 分钟,小闫带你学 Python(十五)

    The secret to happiness is freedom. And the secret to freedom is courage.

    小闫同学啊
  • DevOps实践

    发布管理 Scrum 看板 交付流水线 DevOps关注: 频繁交付小的需求 对质量有大的信心

    用户5760343
  • 计算树结点路径的一种Javascript的实现

    感谢大家阅读,另外,在这边帮朋友推一个爱心众筹,希望大家能够奉献点爱心,朋友母亲,身患直肠癌,目前在北京武警总医院接收治疗,可留言留下您的联系方式,日后感激大家...

    MudOnTire
  • MySQL多表查询笔记总结

    SELECT查询不但可以从一张表查询数据,还可以从多张表同时查询数据。查询多张表的语法是:SELECT * FROM <表1> <表2>。

    框架师
  • UML学习-时序图

    时序图(Sequence Diagram)是显示对象之间交互的图,这些对象是按时间顺序排列的。顺序图中显示的是参与交互的对象及其对象之间消息交互的顺序。时序图...

    水击三千
  • jquery获取表单数据方法$.serializeArray()获取不到disabled的值

    蓓蕾心晴
  • 左手用R右手Python系列之——字符串格式化进阶

    关于R语言字符串格式化之前无论是专题还是案例教程中均有所涉及,今日这一篇之所以重提是因为又找到了一个很好用的字符串格式化包。 这个包的语法源于Python风格,...

    数据小磨坊
  • Google 助力大脑神经网络研究,发布高分辨率果蝇半脑突触连接图

    神经学领域有这样一个假设:在脑功能中脑细胞之间的神经连接起着非常重要作用。过去,神经学科学家因技术的限制而无法深入地研究大脑神经网络,但随着技术的发展,这种状况...

    脑机接口社区
  • 我的GraphQL安全学习之旅

    GraphQL是Facebook的一个开源项目,定义了一种查询语言,用来代替传统的RESTful API。看到QL这样的字眼,很容易产生误解,以为是新的数据库查...

    Deen_

扫码关注云+社区

领取腾讯云代金券