看到阿里云有免费的Symantec证书就去申请了,中间遇到了各种各样的坑,官方的教程永远不会提醒你,到安全组把443端口允许访问……我就是这样,按照教程完完整整地配置了n遍,但就是不能访问,要不是偶然间发现服务器本地能访问443端口后上网查了查,不然我估计永远都想不起来阿里云的安全组配置。
下面是参考了许多教程的总结版和个人心得:
1. 购买申请证书:
进到阿里云的SSL证书管理控制台,保护类型选择“1个域名”后就有免费的Symantec证书选项,然后一直下一步就可以了。
购买完之后是“未签发”状态,需要申请,正确填写网站信息就容易审核通过,而且审核速度蛮快的,我大概就等了1个小时?
2. 安装到服务器
上面的审核结束后,在已签发里找到刚才的证书,就有下载按钮了:
然后下载对应的服务器类型适用的证书。
我的服务器是Tomcat,所以详细介绍,其他的服务器类型可以参考阿里的教程:
因为我自己的是Tomcat服务器,所以下面详细说明如何配置Tomcat的证书。
下载Tomcat服务器的证书后解压,里面有一个.pfx文件和一个.txt文件,其中.pfx是证书,.txt是密码,每次下载的密码和证书是互相匹配的,所以不要重复下载后混淆使用。假设证书的名称为a.pfx。
使用keytool将pfx格式的证书转换为jks,在终端输入以下命令:
keytool -importkeystore -srckeystore a.pfx -destkeystore a.jks -srcstoretype PKCS12 -deststoretype JKS
温馨提示: Windows需要在%JAVA_HOME%/jdk/bin目录下执行
回车后会需要验证和输入密码,和刚才的.txt一样就可以了,最好设置成相同的,不然Tomcat可能启动失败。
找到Tomcat目录,新建cert文件夹,将a.pfx, a.jks, a.txt都复制进去,之后到conf文件夹找到server.xml文件,找到<Connection port=”8443”标签,增加如下属性:(a.jks替换为实际的证书文件名,下同)
keystoreFile="cert/a.jks"
keystorePass="证书密码"
完整配置如下供参考:
<Connector port="443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="cert/a.jks"
keystorePass="证书密码"
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
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"/>
上面的
protocol="HTTP/1.1"
可以替换成
protocol="org.apache.coyote.http11.Http11NioProtocol"
据说可以提升性能。
3. 开放服务器443端口
以Windows Server为例,进入防火墙设置,点击入站规则,点击新建规则
填写端口443
之后一直下一步,起个名字,保存就好了
4. 阿里云安全组配置
在阿里云中找到你的云主机,点击更多进入安全组:
在安全组列表里找到那台机子所在的安全组,配置规则,如果没有配置过443端口,就添加安全组规则,如图:
确定,重启Tomcat服务器就可以用https访问了。
5. 拓展:强制https访问
到装载在服务器里的web应用里的web.xml内加入这段代码,重启Tomcat即可。
<!-- 强制SSL配置,即普通的请求也会重定向为SSL请求 -->
<security-constraint>
<web-resource-collection>
<web-resource-name>SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<description>SSL required</description>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
评论区