个人项目简单https服务配置

1.SSL简介

SSL证书是一种数字证书,由受信任的证书颁发机构(CA)颁发,用于在互联网通信中建立加密链接。SSL代表"安全套接层",是用于在互联网上创建加密链接的协议。SSL证书的主要目的是确保数据传输的安全性和隐私性,同时验证网站的所有权。

1.特点

  1. 加密:SSL证书使用公钥加密技术来加密数据,确保只有预期的接收者才能解密和读取信息。

  2. 身份验证:通过验证网站的域名和组织信息,SSL证书帮助用户确认他们正在与合法的网站进行交互。

  3. 数据完整性:SSL证书确保数据在传输过程中未被篡改。

  4. 信任:由受信任的CA颁发的证书,可以让用户对网站的真实性和安全性有信心。

  5. 浏览器兼容性:大多数现代浏览器都支持SSL,并且当用户访问使用SSL证书的网站时,浏览器会显示一个锁形图标,表示该网站是安全的。

2.类型

  • 域名验证(DV)证书:只验证域名的所有权。
  • 组织验证(OV)证书:除了验证域名外,还验证组织的合法性。
  • 扩展验证(EV)证书:提供最高级别的验证,包括对组织的详细验证,通常在浏览器地址栏中显示为绿色,并可能显示组织名称。
    注意:
  • 各大小程序运营商必须要求项目后端配置SSL证书,且后端请求域名必须为https请求,否则无法正常访问。
  • 微信等社交聊天界面中如果网站地址没有配置ssl和https,则会弹出页面不安全,默认无法跳转。

2.SSL证书的申请获取

ssl证书的获取途径有很多,例如各大云服务器厂商,CA机构都有提供ssl证书服务,或者通过第三方机构购买。网上也有许多免费的ssl证书服务,免费的ssl一般都会有使用期限,到期后需要重新申请。
这里列出几个比较常用的ssl证书申请途径

  1. 云厂商:阿里云、腾讯云等,这些云厂商一般都有ssl证书服务,申请比较方便。
  2. JoySSL,Let's Encrypt等免费ssl证书服务,这些免费ssl证书服务一般都有申请入口,使用起来比较方便。

申请流程(这里以阿里云为例):

  1. 进入阿里云ssl证书服务,点击"SSL证书管理"。阿里云

  2. 选择需要申请的整数类型(这里个人测试证书可以免费试用三个月,如果是个人练习推荐使用)。

  3. 点击购买证书。购买证书表单中需要选择购买的类型,自己服务器的域名,以及ssl证书的服务类型。

  • 这里的服务器域名需要填写自己的自己购买的域名(注意: 某些免费试用的域名是无法申请ssl证书的,这里建议直接买个)阿里云域名
  • 这里我们是要配置自己的网站服务,就需要选择"DV域名验证"。
  1. 选择好之后点击"立即购买"按钮,然后选择"确认订单",支付成功后即可申请ssl证书。
  2. 申请通过之后就可以在"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项目:

bash 复制代码
npx express-generator # 创建一个express项目

然后我们安装一下依赖并同时安装一下https模块:

bash 复制代码
npm install
npm install https --save

2. 配置https服务

我们打开bin文件夹下的www文件,在这个文件中导入https模块,并通过fs模块将下载好的证书文件读取出来引入,然后将http服务替换为https创建服务并配置端口号,ssl证书配置文件。

javascript 复制代码
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证书即可。

js 复制代码
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服务的配置。

相关推荐
辣个蓝人QEX21 分钟前
【ZYNQ 开发】填坑!双核数据采集系统LWIP TCP发送,运行一段时间不再发送且无法ping通的问题解决
网络·嵌入式硬件·网络协议·tcp/ip·fpga·zynq
stormsha1 小时前
HTTPS协议详解:从原理到流程,全面解析安全传输的奥秘
网络协议·安全·https
csdn_aspnet2 小时前
IIS HTTPS 网页可能暂时无法连接,或者它已永久性地移动到了新网址 ERR_HTTP2_INADEQUATE_TRANSPORT_SECURITY
https·iis
KookeeyLena13 小时前
直播加速所用的网络协议与网速比我们平常使用的有什么特殊
网络·网络协议
灵猫小西3 小时前
鸿蒙HarmonyOS之封装Http请求工具类
网络·网络协议·http·鸿蒙
小嘟嚷ovo5 小时前
mac怎么设置ip地址映射
网络·网络协议·tcp/ip
tmddj9027410 小时前
如何禁止非真实用户的ip访问网站服务器
服务器·网络协议·tcp/ip
I nedd more power11 小时前
springcloud为什么采用Http而非RPC
http·spring cloud·rpc
weixin_4222013011 小时前
ip 地址查看cmd命令
网络·网络协议·tcp/ip·命令·地址