一、HTTPS基础知识
- 分为单项SSL和双向SSL,单项SSL意思就是证书只在服务器端,客户端没有证书。双向就是服务器和客户端都有证书。不部分都是采用单项SSL。
- 能够购买HTTPS证书的机构国内一般有CFCA、阿里云等,HTTPS证书可以自己生成也可以从认证机构购买,自己生成的证书在游览器访问的时候会提示不安全,因为各大游览器厂商只认全球几大认证机构的证书,他们认证的更安全可靠。
- 证书一般分为多域名证书、通配符证书等,多域名证书就是此证书可以同时在多个域名中使用。通配符域名证书指的是主域名底下的子域名都能用,比如主域名baidu.com那么他的子域名sw.baidu.com、tieba.baidu.con等都能用。再科普下,主域名baid.com全域名应该是www.baidu.com,其中www是主域名默认的。可以理解为除了www开头的都是子域名。
- 证书申请的流程一般是我们通过如Keytool、OpenSSL的工具制作成证书,生成证书请求文件和私钥。私钥自己保存,证书的请求文件发给权威的认证机构,让他们替我们验签,验签后,各大windows、安卓、ios游览器就都能通过了。但是几乎所有的认证机构就直接帮我把证书制作好,并验签了。认证机构会把秘钥和证书文件一起都给我们。
- 从认证机构购买证书的时候,可以根据我们的实际web环境,和他们要不同格式的证书文件。Tomcat、Weblogic、JBoss等,使用 Java Keystore(JKS)格式 的证书 文件;Apache、Nginx等,使用 KEY、CRT格式的证书 文件;
二、HTTPS配置
1、tomcat环境下的https配置
参考资料:
例如认证机构发给我们的证书是server.keystore,密码是123456,我们将证书放到tomcat目录下conf文件夹里面。
<!-- 将servlet.xml一下的的注释打开 -->
<Connector protocol="org.apache.coyote.http11.Http11Protocol"
port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/server.keystore"
keystorePass="123456"/>
到这一步访问https://ip:8443/
一般Tomcat默认的SSL端口号是8443,但是对于SSL标准端口号是443,这样在访问网页的时候,直接使用https而不需要输入端口号就可以访问,如https://ip/
想要修改端口号,需要修改Tomcat的server.xml文件:
1.non-SSL HTTP/1.1 Connector定义的地方,一般如下:
<Connector port="80" maxHttpHeaderSize="8192"
maxThreads="500" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
将其中的redirectPort端口号改为:443
2.SSL HTTP/1.1 Connector定义的地方,修改端口号为:443,如下:
<Connector
port="443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25"
maxSpareThreads="75"
enableLookups="false"
disableUploadTimeout="true"
acceptCount="100" scheme="https"
secure="true"
clientAuth="false" sslProtocol="TLS"
keystoreFile="conf/tomcat.keystore"
keystorePass="123456" />
3.AJP 1.3 Connector定义的地方,修改redirectPort为443,此处表示外部服务器转发到我们服务器的配置,如下:
<Connector port="8009"
enableLookups="false" redirectPort="443" protocol="AJP/1.3" />
4、强制https访问
在tomcat\conf\web.xml中的</welcome-file-list>后面加上这样一段:
<login-config>
<!-- Authorization setting for SSL -->
<auth-method>CLIENT-CERT</auth-method>
<realm-name>Client Cert Users-only Area</realm-name>
</login-config>
<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>
注意:(如果对方使用的机器端口被占用)
需要切换端口来转换数据:iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080