一、HTTPS基础知识

  1. 分为单项SSL和双向SSL,单项SSL意思就是证书只在服务器端,客户端没有证书。双向就是服务器和客户端都有证书。不部分都是采用单项SSL。
  2. 能够购买HTTPS证书的机构国内一般有CFCA、阿里云等,HTTPS证书可以自己生成也可以从认证机构购买,自己生成的证书在游览器访问的时候会提示不安全,因为各大游览器厂商只认全球几大认证机构的证书,他们认证的更安全可靠。
  3. 证书一般分为多域名证书、通配符证书等,多域名证书就是此证书可以同时在多个域名中使用。通配符域名证书指的是主域名底下的子域名都能用,比如主域名baidu.com那么他的子域名sw.baidu.com、tieba.baidu.con等都能用。再科普下,主域名baid.com全域名应该是www.baidu.com,其中www是主域名默认的。可以理解为除了www开头的都是子域名。
  4. 证书申请的流程一般是我们通过如Keytool、OpenSSL的工具制作成证书,生成证书请求文件和私钥。私钥自己保存,证书的请求文件发给权威的认证机构,让他们替我们验签,验签后,各大windows、安卓、ios游览器就都能通过了。但是几乎所有的认证机构就直接帮我把证书制作好,并验签了。认证机构会把秘钥和证书文件一起都给我们。
  5. 从认证机构购买证书的时候,可以根据我们的实际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