个人网站的HTTPS配置

一.简介

  其实本来不想写这个的,但是昨天域名备案过了后,配置https搞了我整整半天,属实是搞急了,csdn上面坑人的教程可真是多,走了很多的弯路,趁着现在还记得,就记录一下吧,后面说不定也会用到的,这篇写完就要准备去复习了,感觉离被卷死真的就一步之遥了……

二.方法

2.1 Tomcat的方法

  不推荐使用这种方法,因为需要修改工程代码和配置。我在最开始配nginx转发失败时,也尝试了一下这种方法,方法是ok的,但便利程度远不及nginx,所以为什么不用nginx转发呢?不过说不定以后还会用到这种方式,所以也记录一下吧

  1. 申请证书,域名购买的地方一般可以免费申请,我是在阿里云申请的,参考:阿里云域名购买,购买免费的DV单域名证书就可以了,有效期一年,到期可以继续申请的

  2. 下载证书的Tomcat版本,将其中的pfx文件拷贝到项目的resource目录下

  3. 配置application.yaml文件

server:
  ssl:
    enabled: true
    key-store-password: pfx-password.txt中的密码
    key-store-type: PKCS12
    key-store: classpath:你的.pfx文件名

  4. 在SpringBoot启动项下添加相关配置

    @Bean
    public ServletWebServerFactory servletContainer() {
        TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
            @Override
            protected void postProcessContext(Context context) {
                SecurityConstraint securityConstraint = new SecurityConstraint();
                securityConstraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                securityConstraint.addCollection(collection);
                context.addConstraint(securityConstraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(httpConnector());
        return tomcat;
    }

    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        connector.setScheme("http");
        //Connector监听的http的端口号
        connector.setPort(8080);
        connector.setSecure(false);

        //监听到http的端口号后转向到的https的端口号
        connector.setRedirectPort(443);
        return connector;
    }

  5. 在你的服务器尝试运行一下你的项目,因为你可能会碰到很多的端口冲突情况,老老实实用lsof -i:端口号去杀冲突的进程吧.

  6. 去你的域名解析那儿配置域名解析,我用的阿里云,可以参考阿里云域名解析向导

  7. 最后,重新运行项目即可,不过还是不太推荐这种方式,不方便,且会出现很多很多莫名其妙的问题,所以还是用nginx吧

2.2 Nginx转发

  推荐的方法!只要你别跟着csdn上面那些坑爹的教程做就好了

  1. 申请证书,域名购买的地方一般可以免费申请,我是在阿里云申请的: 阿里云域名购买,购买免费的DV单域名证书就可以了,有效期一年,到期可以继续申请的

  2. 下载证书的nginx版本,其中包含keypem两个文件

  3. 检查你nginx有没有安装ssl模组,nginx/sbin目录下(你可能看不见sbin这个目录,但并没有问题,可以直接带着路径执行指令),指令nginx -V(带目录指令 /usr/local/nginx/sbin/nginx-V 前面改成你的目录)
  如果显示configure arguments: --with-http_ssl_module代表正确安装了,请跳到步骤5,否则需要重新安装模块

  4. 进入你nginx的目录,就是压缩包解压的目录下,使用指令./configure --with-http_ssl_module,如果您nginx没有其他的设置,建议直接执行make install重新安装,这样会覆盖原来的版本,可以确保安装没有问题,否则执行make(我没试过……不过csdn上说这样可以,要不你们试试?),安装完按照步骤三检查一下,确保没有问题

  5. 将你的pemkey文件拷贝到nginx配置文件的目录

  6. 将相关端口添加到阿里云网络安全组中,阿里云请参考阿里云端口配置,并开启防火墙限制(443,80,你项目的端口)

    #基于Centor OS 7的防火墙配置过程
    1. 防火墙状态设置
        firewall-cmd --state #查看防火墙状态,为了安全性,建议开启开启防火墙
        systemctl start firewalld.service   #开启防火墙
        systemctl enable firewalld.service  #设置防火墙开机自启动,建议设置一下
        systemctl is-enabled firewalld.service;echo $? #查看是否设置成功,显示enabled和0,代表设置成功

    2.开启端口
        firewall-cmd --zone=public --add-port=端口号/tcp --permanent #--permanent永久生效,没有此参数重启后失效
        firewall-cmd --zone=public --add-port=1000-2000/tcp --permanent #批量添加1000-2000
        firewall-cmd --reload       #重新载入防火墙
        firewall-cmd --list-ports   #查看端口开放情况,其中须包括443,80,项目端口

  7. 配置nginx配置文件,如果您不确定使用了哪个配置文件,使用指令ps -ef | grep nginx查看,最后会显示当前配置文件路径的,配置文件修改步骤如下

    1.注释掉默认配置,整段需全部注释掉
    server{
        listen 80;
        ……
        ……
    }

    2.添加https端口监听
    server {
        listen       443 ssl;
       server_name  你的域名;

       ssl_certificate      你的pem文件地址;
      ssl_certificate_key  你的key文件地址;
      #地址可以使用对于本配置文件的相对路径,例如如果你的文件和conf同级目录下,则可以直接写文件名
      #最好使用绝对路径

      ssl_session_cache    shared:SSL:1m;
      ssl_session_timeout  5m;

      ssl_ciphers  HIGH:!aNULL:!MD5;
      ssl_prefer_server_ciphers  on;

       location / {
    	proxy_pass   http://你服务器的ip:你项目的端口;
           root   html;
           index  index.html index.htm;
       }
   }

   3.添加80端口监听和强制转化
   server {
    	listen 80; #域名访问会默认映射到80端口
    	server_name 你的域名;
	location / {
        	proxy_pass   http://你服务器的ip:你项目的端口;
       	 index  index.html index.htm;
        	proxy_set_header Host $host;
      	  proxy_set_header X-Real-Ip $remote_addr;
     	   proxy_set_header X-Forwarded-For $remote_addr;
  	  }
    	rewrite ^(.*)$ https://你的域名:443/$1 permanent;
	}

  8. 重新启动nginx,使用指令nginx -s reload即可(带目录执行/usr/local/nginx/sbin/nginx -s reload 前面改成你的目录)

  9. 域名解析,配置两条A记录www和@,记录值填你的ip即可,TTL无需修改

三.其他

  如果您将网站升级了https,请注意网站内所有http链接都会失效,我本来用的七牛云免费cdn的,因为要进行https传输也不免费了,没办法只能换成了又拍云,加入开发者联盟后每个月有15G的https流量,基本上够用了。如果不需要cdn的话也可以用有道云等别的图床,只要是https传输都可以

end
  • 作者:Yuan(联系作者)
  • 发表时间:2021-12-08 21:11
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载博主转载的文章,请附上原文链接
  • 公众号转载:请联系作者
  • 评论