WINDOWS下装载SSL证书和伪静态强制HTTPS

发布于 2023-01-18  372 次阅读


基本信息

  • 首先需要有域名和ssl证书,其实没有域名仅靠ip也可以获得ssl证书,并且实现https+ip访问,但是经过我的了解后发现,市面上提供ip的ssl证书的厂家并不多,就更不用提免费的ssl证书了,而在腾讯云,阿里云等大厂家注册的的域名都是提供免费的ssl证书的.以腾讯云为例,腾讯云为每个账号提供20张亚洲诚信的ssl证书,每张证书一年有效,如果名下只有一个域名,一年申请一次即可保证20年的免费
  • 通常证书有单域名证书,多域名证书,泛域名证书和通配符多域名证书,另外几种一般都是收费的,所以官方会提供支持文档,这里说一下单域名证书,有的人可能会疑惑,单域名证书只能绑定一个域名,那么域名下的多级文件结构都可以变成https吗?是的,一个域名绑定了ssl后,域名所解析到的ip对应的网站根目录下的所有内容都将受到ssl的保护
  • 但是很多朋友的网站并不准备暴露完整的网站目录(如a.com/xxxx/xxxx)而是准备使用子域名便于访问,那么单域名证书可以给三级域名使用吗,答案是可以的不过有一定的限制
  • 这是腾讯云对单域名提供的权限
单域名:即只支持绑定1个域名,可以是二级域名 tencent.com,也可以是三级域名 example.tencent.com,均可以支持
,但不支持二级域名下的所有子域名。域名级数最多可以支持100级

多域名:即单个证书可以绑定多个域名,最多可以支持域名数量以官网售卖为准。

泛域名:即支持绑定一个且只有一个泛域名,泛域名只允许添加一个通配符,例如 *.tencent.com
*.example.tencent.com , 最多支持100级;*.*.tencent.com 多个通配符的泛域名是不支持的

通配符多域名:即支持绑定多个泛域名,泛域名只允许添加一个通配符,例如 *.tencent.com,*.example.tencent.com
,最多支持100级;*.*.tencent.com 多个通配符的泛域名是不支持的。
  • 也就是说如果ssl证书绑定了域名后,子域名是不能享受到https的,但是可以利用dns解析中的显性跳转来实现
一、A记录

A(Address)记录是用来指定主机名(或域名)对应的IP地址记录。用户可以将该域名下的网站服务器指向到自己的
web server上,同时也可以设置域名的子域名。简单来讲,A记录就是指定域名对应的IP地址。如我们添加一条A记录
将www的主机指向IP192.168.1.1,那么当你访问www主机时就会解析到192.168.1.1这个IP上。

二、CNAME记录

通常称别名解析,是主机名到主机名的映射。当需要将域名指向另一个域名,再由另一个域名提供 IP 地址,就需要添
加 CNAME 记录,最常用到 CNAME的场景包括做CDN、企业邮箱、全局流量管理等。与A记录不同的是,CNAME别名记录
设置的值不是一个固定的IP,而是主机的别名地址。

别名解析可以提供更大的灵活性,便于统一管理。比如,当主机因某种因素的影响需要更换IP时,如果域名做了CNAME
记录,就可以同时更新别名的解析指向,不需要进行新的解析操作。

三、NS记录

如果需要把子域名交给其他DNS服务商解析,就需要添加NS记录(Name Server)。NS记录是域名服务器记录,用来
指定该域名由哪个DNS服务器来进行解析。NS记录中的IP即为该DNS服务器的IP地址。大多数域名注册商默认用自己
的NS服务器来解析用户的DNS记录。DNS服务器NS记录地址一般以以下的形式出现:ns1.domain.com、ns2.domain
.com等。

四、SOA记录

SOA,是起始授权机构记录,说明了在众多 NS 记录里哪一台才是主要的服务器。在任何DNS记录文件中,都是以
SOA ( Startof Authority )记录开始。SOA资源记录表明此DNS名称服务器是该DNS域中数据信息的最佳来源。

SOA记录与NS记录的区别:NS记录表示域名服务器记录,用来指定该域名由哪个DNS服务器来进行解析;SOA记录设
置一些数据版本和更新以及过期时间等信息。

五、AAAA记录

AAAA记录(AAAA record)是用来将域名解析到IPv6地址的DNS记录。用户可以将一个域名解析到IPv6地址上,也
可以将子域名解析到IPv6地址上。国内大多数IDC不支持AAAA记录的解析,因此如果想进行AAAA记录解析,则需
对域名NS记录设置一些专业的域名解析服务商,由他们提供AAAA记录的设置。中科三方云解析支持IPv6环境下的
AAAA记录解析。

六、TXT记录

TXT记录,一般指某个主机名或域名的标识和说明。如:admin IN TXT "管理员, 电话:XXXXXXXXXXX",mail 
IN TXT "邮件主机,存放在xxx , 管理人:AAA",Jim IN TXT "contact: abc@mailserver.com",也就是说,
通过设置TXT记录内容可以使别人更方便地联系到你。TXT 记录常用的方式还有做 SPF 记录(反垃圾邮件)和SSL
证书的DNS验证等。

七、MX记录

MX(Mail Exchanger)记录是邮件交换记录,主要用于邮箱解析,在邮件系统发送邮件时根据收信人的地址
后缀进行邮件服务器的定位。MX记录允许设置一个优先级,当多个邮件服务器可用时,会根据该值决定投递邮件
的服务器。

MX记录的权重对 Mail 服务非常重要,当发送邮件时,Mail 服务器先对域名进行解析,查找 MX记录。先找权重
数最小的服务器(比如说是 10),如果能连通,那么就将服务器发送过去;如果无法连通 MX 记录为 10 的服
务器,才将邮件发送到权重更高的 mail 服务器上。

八、PTR记录

PTR是pointer 的简写,即“反向DNS”,domain name pointer,可以粗略的理解为DNS反向,是一个指针记录,
用于将一个IP地址映射到对应的主机名,也可以看成是A记录的反向,即通过IP访问域名。

九、SRV记录

即服务定位(SRV)资源记录,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port num
ber)等。

十、URL转发

URL转发,是指通过服务器的特殊设置,将当前访问的域名指向另一个指定的网络地址。根据目标地址的隐藏与
否,URL转发可以分为显性URL和隐性URL两种。

显性URL:将域名指向一个http(s)协议地址,访问域名时,自动跳转至目标地址,地址栏显示为目标网站地址。

隐性URL:与显性URL类似,但隐性转发会隐藏真实的目标地址,地址栏中显示为仍为此前输入的地址。
  • 一般来说能用的的就是a,cname,mx和url转发,a记录是用来将域名解析到ip的,cname将一个域名解析到另一个域名一般是用来弄cdn加速的(这个后面也会开一篇文章),mx是用来生成邮箱的,url转发就是域名层面的301跳转
  • 举个例子,在域名管理处添加一条显性url的解析记录,解析名填blog(全称blog.example.com),解析类型为显性URL,指定链接为example.com/blog/,那么浏览器访问blog.example.com的时候就会301跳转到example.com/blog/,此时浏览器地址栏会显示example.com/blog/
  • 而隐性url也类似,在域名管理处添加一条隐性url的解析记录,解析名填blog(全称blog.example.com),解析类型为隐性URL,指定链接为example.com/blog/,那么浏览器访问blog.example.com的时候就会301跳转到example.com/blog/,此时浏览器会显示blog.example.com
  • 那么将ssl给example.com后,需要给一个子域名,如blog.example.com加ssl,只需要添加一条显性url记录即可
  • 隐性url可以吗?经过测试后,我的答案是不行.首先隐性url解析有很大的限制条件,多文件多层级目录的站点使用隐性url解析后,浏览器会显示错误并且打开隐性url所定向到的网页,无法以此做到隐藏网站文件目录结构的功能,即使隐性url所定向到的是静态页面或固定资源,成功的隐藏了网站的目录,但根据单域名证书的局限性,也无法实现https访问

开始配置

  • 了解到以上信息后就十分方便了,这里提供的是windows下小皮面板(apache服务器)的ssl证书装载方法
  • 一开始我也走了不少弯路,我查了不少网站资料,大部分可以归于以下步骤:
1.先上传证书文件,两个crt(一个证书,一个证书链),一个key(私钥)文件
2.打开Apache 服务器 conf 目录下 httpd.conf 文件,配置文件中默认将ssl模块关闭的,要实现ssl就需要打开
它,将#LoadModule ssl_module modules/mod_ssl.so和#Include conf/extra/httpd-ssl.conf前面的注释符删掉就
可以了
3.设置Apache 服务器 conf\extra 目录下 httpd-ssl.conf配置文件
将下面三个字段设置成自己上传的证书文件的位置(说起来不知道这里能不能用url定位文件🤣)
SSLCertificateFile "C:/apache/conf/ssl.crt/cloud.tencent.com.crt"(证书文件)
SSLCertificateKeyFile "C:/apache/conf/ssl.key/cloud.tencent.com.key"(私钥文件)
SSLCACertificateFile "C:/apache/conf/ssl.crt/root_bundle.crt"(证书链文件)
4.重启apache服务器就行了
  • 可以先试试上述方法(反正我是没有成功的),试之前一定要备份文件!备份文件!备份文件!最好直接做一个快照,不然出差错就凉了,大部分站点因为和mysql相连,可移植性并不高,apache没了那很多站点就真的没了
  • 没成功的话就看看我怎么操作的吧:
  1. 打开小皮面板,点左边的网站,正常情况下这时候右边是有一个80端口的站点,点管理->修改
  2. 点设置窗口中的https,会弹出来一个窗口让复制证书内容,点击导入将三个证书导入就行了,其中私钥文件需要导入key文件,公钥文件需要导入一个crt文件(一般是以网站的域名为名字的),证书链文件需要导入另一个crt文件(一般是root或者bundle什么的)
  3. 这时候下面的http跳转https是点击不了的,不用管它,后面要写.htaccess文件,这里点确定就行了
  4. 出来之后再点管理->修改,点其他,勾选http跳转到https,这时候会再次生成一个80端口的网站
  5. 再回到首页,将apache的启动端口改成443端口,点击配置,在设置窗口将启动端口右边的80端口改成443(小皮面板真香,不然又得去改配置文件了,估计又有人觉得应该手动操作配置文件,最好图形化工具都不用,直接像linux一样命令行文件操作才显得newbee,但是有工具为什么不用呢,这些工具编写比输那几个小命令复杂多了,追求复杂还不如去编一个这种图形化工具🤣)
  6. 这时候就完了?还没有,还得改一下.htaccess文件
什么是.htaccess文件?

.htaccess(超文本访问)是许多Web服务器根据目录应用设置的有用文件,允许在运行时覆盖Apache服务器的默认配置。
使用.htaccess,我们可以在运行时轻松启用或禁用任何功能。

htaccess文件可以实现的功能有哪些?

网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文
档等功能
  1. 这里要用到.htaccess文件的301重定向功能,在网站根目录找到.heaccess文件(没找到就创建一个记事本再命名为.htaccess,没法留空文件名就用记事本的另存为功能,),添加下面的话,大概意思是第一行打开重写引擎,第二行收到%{SERVER_PORT}(端口号)的值不为443的话就触发,第三行的意思是重定向到https://你的域名/访问的目录,$1表示访问目录
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule (.*) https://你的域名/$1 [R]
  • 那有人问了,把所有非443端口的请求都强制跳转到https://这个网址,那比如其他端口开了一些服务怎么办,好家伙,apache也就监听80和443端口,!443就是指80呗,那这里说不定还可以把!^443$改成^80$呢感兴趣的话可以逝一逝,我是不想碰这些东西了,感觉和一堆积木一样越搭越高,碰多了要垮

一些问题

  • 访问不了?记得打开防火墙的443端口!不会都2023年了还有人不知道防火墙吧(🐶狗头保命),
  • 仍然提示网页不安全?因为https中使用了http的资源,比如插入了来自http的图片,css,js等都会出现此情况,只能一点一点查代码然后改资源路径了
届ける言葉を今は育ててる
最后更新于 2024-02-07