Project

General

Profile

tomcat支持https方案

设计
11/07/2020

https证书格式有哪些

https://blog.freessl.cn/ssl-cert-format-introduce/

tomcat支持https访问

Tomcat支持PFX格式和JKS两种格式的证书,根据您Tomcat的版本择其中一种格式的证书安装到Tomcat上

在Tomcat安装目录下新建cert目录,将下载的证书和密码文件拷贝到cert目录下。打开Tomcat > conf > server.xml文件,
在server.xml文件中添加以下属性(其中port属性请根据您的实际情况修改):

1、pfx 格式证书安装,支持tomcat7及以上版本均可


<Connector port="443" 
    protocol="HTTP/1.1" 
    SSLEnabled="true" 
    scheme="https" 
    secure="true" 
    keystoreFile="cert/1654378_imis.ilstudy.com.pfx" 
    keystoreType="PKCS12" 
    keystorePass="2j4OKaxG" 
    clientAuth="false" 
    SSLProtocol="TLS" 
    />
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

2、jks 格式证书安装,支持tomcat6及以上版本均可


<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" 
               maxThreads="150" scheme="https" secure="true" 
               keystoreFile="cert/imis.ilstudy.com.jks" keystorePass="jawave88" 
               clientAuth="false" sslProtocol="TLS" 
 ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"  />
<Connector port="8009" protocol="AJP/1.3" redirectPort="443" />

其他相关:如果证书只有PEM格式,需要转换成jks或者pfx格式

证书转换:

https://myssl.com/cert_convert.html

证书验证:

https://cloud.tencent.com/product/ssl#userDefined10

域名证书

直接从域名发放网站申请对应域名的证书,tomcat支持格式为pfx或jks格式

自签名证书

生产密钥和证书
Tomcat 目前只能操作 JKS、PKCS11、PKCS12 格式的密钥存储库。JKS 是 Java 标准的“Java 密钥存储库”格式,是通过 keytool 命令行工具创建的。该工具包含在 JDK 中。PKCS12 格式一种互联网标准,可以通过 OpenSSL 和 Microsoft 的 Key-Manager 来。

创建一个 keystore 文件保存服务器的私有密钥和自签名证书:

Windows:

"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
UNIX:

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA
执行该命令后,首先会提示你提供 keystore 的密码。Tomcat 默认使用的密码是 changeit(全部字母都小写),当然你可以指定一个自定义密码(如果你愿意)。同样,你也需要将这个自定义密码在 server.xml 配置文件内进行指定,稍后再予以详述。

接下来会提示关于证书的一般信息,比如组织、联系人名称,等等。当用户试图在你的应用中访问一个安全页面时,该信息会显示给用户,所以一定要确保所提供的信息与用户所期望看到的内容保持一致。

最后,还需要输入密钥密码(key password),这个密码是这一证书(而不是存储在同一密码存储库文件中的其他证书)的专有密码。keytool 提示会告诉你,如果按下回车键,则自动使用密码存储库 keystore 的密码。当然,除了这个密码,你也可以自定义自己的密码。如果选择自定义密码,那么不要忘了在 server.xml 配置文件中指定这一密码。

下面是详细步骤:

C:\Users\admin>"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA
输入密钥库口令:
再次输入新口令:
您的名字与姓氏是什么?
[Unknown]: waylau
您的组织单位名称是什么?
[Unknown]: waylau.com
您的组织名称是什么?
[Unknown]: waylau.com
您所在的城市或区域名称是什么?
[Unknown]: hangzhou
您所在的省/市/自治区名称是什么?
[Unknown]: zhejiang
该单位的双字母国家/地区代码是什么?
[Unknown]: china
CN=waylau, OU=waylau.com, O=waylau.com, L=hangzhou, ST=zhejiang, C=china是否正确
?
[否]: y

输入 <tomcat> 的密钥口令
(如果和密钥库口令相同, 按回车):

如果操作全部正常,我们现在就会创建一个新的 JKS 密码存储库,该密码库包含一个自签名的证书。创建一个新的 JKS 密码存储库,该密码库包含一个自签名的证书。

该命令将在用户的主目录下创建一个新文件:.keystore。

要想指定一个不同的位置或文件名,可以在上述的 keytool 命令上添加 -keystore 参数,后跟到达 keystore 文件的完整路径名。你还需要把这个新位置指定到 server.xml 配置文件上,见后文介绍。例如:

Windows:

"%JAVA_HOME%\bin\keytool" -genkey -alias tomcat -keyalg RSA -keystore \path\to\my\keystore
Unix:

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore /path/to/my/keystore
修改配置
取消对 Tomcat 安装目录下 /conf/server.xml 中 “SSL HTTP/1.1 Connector” 一项的注释状态,并制定 keystore 的路径和密码:

&lt;Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
keystoreFile="${user.home}/.keystore" keystorePass="changeit"
clientAuth="false" sslProtocol="TLS" />
Tomcat 指定了 8443 端口为 HTTPS 访问端口

如果要隐藏端口号,就要把 Tomcat 的 HTTPS 端口设为 443

若想把所有 HTTP 请求都转到 HTTPS 协议上,可以修改tomcat的conf下的web.xml,在

节点下方 添加如下:

<security-constraint>
<!-- Authorization setting for SSL -->
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
```xml

其中,<url-pattern> 是配置文件过滤策略,比如,只对 .jsp 的请求自动转化为HTTPS ,配置如下:

```xml
<security-constraint>
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>*.jsp</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
```xml

在 <url-pattern> 中可以配置你希望自动转化的请求路径 /* 、 login.html 、 login.jsp 等等。

效果

首先,浏览器访问没有 HTTPS 支持的页面,<http://localhost:8080>
接着,浏览器访问 HTTPS 的页面:<https://localhost:8443/>

当用户首次访问你站点上的安全页面时,页面通常会提供给他一个对话框,包含证书相关细节(比如组织及联系方式等),并且询问他是否愿意承认该证书为有效证书,然后再进行下一步的事务。一些浏览器可能会提供一个选项,允许永远承认给出的证书的有效性,这样就不会在用户每次访问站点时打扰他们了。但有些浏览器不会提供这种选项。一旦用户承认了证书的有效性,那么在整个的浏览器会话期间,证书都被认为是有效的。

内网花生壳映射方式

直接配置https对应的内网映射ip及端口443,目前只支持tomcat7和tomcat8版本

apache 部署证书

https://help.aliyun.com/document_detail/102450.html?spm=5176.2020520154.cas.6.4b4b6TCg6TCglA

Files