1.SSL简介
SSL证书是一种数字证书,由受信任的证书颁发机构(CA)颁发,用于在互联网通信中建立加密链接。SSL代表“安全套接层”,是用于在互联网上创建加密链接的协议。SSL证书的主要目的是确保数据传输的安全性和隐私性,同时验证网站的所有权。
1.特点
-
加密:SSL证书使用公钥加密技术来加密数据,确保只有预期的接收者才能解密和读取信息。
-
身份验证:通过验证网站的域名和组织信息,SSL证书帮助用户确认他们正在与合法的网站进行交互。
-
数据完整性:SSL证书确保数据在传输过程中未被篡改。
-
信任:由受信任的CA颁发的证书,可以让用户对网站的真实性和安全性有信心。
-
浏览器兼容性:大多数现代浏览器都支持SSL,并且当用户访问使用SSL证书的网站时,浏览器会显示一个锁形图标,表示该网站是安全的。
2.类型
- 域名验证(DV)证书:只验证域名的所有权。
- 组织验证(OV)证书:除了验证域名外,还验证组织的合法性。
- 扩展验证(EV)证书:提供最高级别的验证,包括对组织的详细验证,通常在浏览器地址栏中显示为绿色,并可能显示组织名称。
注意: - 各大小程序运营商必须要求项目后端配置SSL证书,且后端请求域名必须为https请求,否则无法正常访问。
- 微信等社交聊天界面中如果网站地址没有配置ssl和https,则会弹出页面不安全,默认无法跳转。
2.SSL证书的申请获取
ssl证书的获取途径有很多,例如各大云服务器厂商,CA机构都有提供ssl证书服务,或者通过第三方机构购买。网上也有许多免费的ssl证书服务,免费的ssl一般都会有使用期限,到期后需要重新申请。
这里列出几个比较常用的ssl证书申请途径:
- 云厂商:阿里云、腾讯云等,这些云厂商一般都有ssl证书服务,申请比较方便。
- JoySSL,Let’s Encrypt等免费ssl证书服务,这些免费ssl证书服务一般都有申请入口,使用起来比较方便。
申请流程(这里以阿里云为例):
-
进入阿里云ssl证书服务,点击“SSL证书管理”。阿里云
-
选择需要申请的整数类型(这里个人测试证书可以免费试用三个月,如果是个人练习推荐使用)。
-
点击购买证书。购买证书表单中需要选择购买的类型,自己服务器的域名,以及ssl证书的服务类型。
- 这里的服务器域名需要填写自己的自己购买的域名(注意: 某些免费试用的域名是无法申请ssl证书的,这里建议直接买个)阿里云域名
- 这里我们是要配置自己的网站服务,就需要选择“DV域名验证”。
- 选择好之后点击“立即购买”按钮,然后选择“确认订单”,支付成功后即可申请ssl证书。
- 申请通过之后就可以在“ssl证书管理”中看到自己的证书。点击进去就会弹出证书的详情,点击“下载”按钮即可下载到本地。 以下介绍一下下载文件的类型:
文件类型 | 描述 |
---|---|
PEM (.pem) | 这是一种文本文件格式,可以使用文本编辑器查看和编辑。它通常包含证书和私钥,适用于大多数服务器和应用程序,如Nginx和Apache。 |
KEY (.key) | 这是私钥文件,通常与PEM格式的证书一起使用。它必须保持安全和私密,不应该公开或分享。 |
CRT (.crt) | 这是一种二进制格式的文件,通常只包含证书。它常用于Apache服务器。 |
DER (.der) | 这是二进制文件格式,与CRT相同,但以DER格式保存。 |
PFX/P12 (.pfx/.p12) | 这是一种二进制格式的文件,同时包含证书和私钥,通常用于Microsoft和Java服务器,如IIS和Tomcat。 |
JKS (.jks) | 这是Java密钥存储文件,专用于Java平台的密钥库格式,常用于基于Java的Web服务器或应用程序。 |
CER (.cer) | 这通常是一个二进制文件,包含证书信息,但不含私钥。 |
CRL (.crl) | 证书吊销列表,用于列出被吊销的证书。 |
CSR (.csr) | 证书签名请求文件,用于生成证书。 |
适用场景和服务包括:
- Web服务器:如Nginx、Apache、Tomcat等,通常使用PEM和CRT格式。
- 应用程序:如Java应用,可能使用JKS格式。
- 电子邮件和PKI:可能使用PFX/P12格式。
- 操作系统和设备:如Windows、Linux等,可能使用不同的格式,如PEM、DER、CRT。
注意: 我们这里的项目前端是部署在Nginx上,后端使用的nodejs,因此我们需要下载nginx对应的文件和apache对应的文件。
3.后端配置是证书及HTTPS请求
1. 初始化
首先我们下来配置一下后端提供https服务。
我们后端是使用express框架,在express中配置https服务比较简单。如果没有express框架可以使用如下命令创建一个express项目:
npx express-generator # 创建一个express项目
然后我们安装一下依赖并同时安装一下https模块:
npm install
npm install https --save
2. 配置https服务
我们打开bin文件夹下的www文件,在这个文件中导入https模块,并通过fs模块将下载好的证书文件读取出来引入,然后将http服务替换为https创建服务并配置端口号,ssl证书配置文件。
const https = require('https');
const fs = require('fs');
const path = require('path');
// 引入证书文件
const certificate = fs.readFileSync(path.join(__dirname,'../ssl//jeek-space-blog.top_public.crt'), 'utf8');
const certificateChain = fs.readFileSync(path.join(__dirname,'../ssl/jeek-space-blog.top_chain.crt'), 'utf8');
const privateKey = fs.readFileSync(path.join(__dirname,'../ssl/jeek-space-blog.top.key'), 'utf8');
// 配置https服务器选项
const credentials = { cert: certificate, ca: certificateChain, key: privateKey };
// 床加你https服务
const server = https.createServer(credentials,app);
配置好以后我们可以完成了express项目中的https服务的配置。
4.前端配置是证书及HTTPS请求
前端配置https服务更加简单,因为我的项目是部署在nginx上的,我们只需要在nginx的配置文件中配置一下ssl证书即可。
server {
listen 443 ssl; // 使用ssl服务并配置端口号
server_name your_domain.com; //配置域名
ssl_certificate /path/to/your_certificate.pem; // _certificate.pem 文件路径
ssl_certificate_key /path/to/your_private_key.key; // _private_key.key 文件路径
ssl_trusted_certificate /path/to/your_intermediate_certificate.pem; // _intermediate_certificate.pem 文件路径
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers HIGH:!aNULL:!MD5;
location / {
root /usr/share/nginx/html;
index index.html index.htm;
}
}
// 配置http服务重定向到https
server {
listen 80;
server_name your_domain.com;
return 301 服务器域名;
}
配置完重载nginx配置文件即可完成https服务的配置。