HTTPS的原理浅析与本地开发实践(下)

简介: 本文将以阿里云证书配置和OpenSSL自签证书配置两种方式来让你的网站从HTTP转换到HTTPS,为系列第二篇,第一篇:HTTPS的原理浅析与本地开发实践(上)。希望这两篇关于HTTPS的浅析能够对你的日常研发过程有所帮助。

使用CA机构签发的证书配置http


—— 以阿里云免费SSL证书申请过程为例

一般给末端用户签发证书的CA机构属于二级机构(代理机构),这些机构需要根证书机构的认证。在向CA代理机构申请证书时,都需要填写证书签名请求(CSR)文件,这个文件主要描述的信息是当前申请人的基础信息、站点信息和公钥信息,然后向CA提交CSR,进而得到终端证书。
▐  生成CSR文件

方案一:使用OpenSSL工具生成CSR文件

openssl req -new -nodes -sha256 -newkey rsa:2048 -keyout [$Key_File] -out [$OpenSSL_CSR]
  1. -new:指定生成一个新的CSR文件。
  2. -nodes:指定密钥文件不被加密。
  3. -sha256:指定摘要算法。
  4. -newkey rsa:2048:指定密钥类型和长度。
  5. [$Key_File]:密钥文件名称。
  6. [$OpenSSL_CSR]:加密后文件的存放路径。


根据系统返回的提示,输入生成CSR文件所需的信息。以下是关于提示的说明:

  1. Organization Name:公司名称,可以是中文或英文。
  2. Organization Unit Name:部门名称,可以是中文或英文。
  3. Country Code:申请单位所属国家,只能是两个字母的国家码。例如,中国只能是CN。
  4. State or Province:州名或省份名称,可以是中文或英文。
  5. Locality:城市名称,可以是中文或英文。
  6. Common Name:申请SSL证书的具体网站域名。
  7. Email Address:可选择不输入。
  8. A challenge password:可选择不输入。

image.png

完成命令提示的输入后,当前目录下获取密钥文件和CSR文件

image.png

[ req ]
default_bits       = 2048
distinguished_name = req_distinguished_name
req_extensions     = req_ext
[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
stateOrProvinceName         = State or Province Name (full name)
localityName               = Locality Name (eg, city)
organizationName           = Organization Name (eg, company)
commonName                 = Common Name (e.g. server FQDN or YOUR name)
[ req_ext ]
subjectAltName = @alt_names
[alt_names]
DNS.1   = bestflare.com
DNS.2   = usefulread.com
DNS.3   = chandank.com

方案二、使用线上工具生成CSR

—— 在线生成地址:https://myssl.com/csr_create.html


▐  阿里云申请过程


进入阿里云官网数字证书管理栏目(https://www.aliyun.com/product/cas),开始【选购SSL证书】,找到【免费证书】栏目,开始创建新证书。

  1. 填写证书申请表单


image.png

(当时的申请流程是按照www.ccdoit.com域名走的,但是后续配置时将该证书删除,所以最后用了ssl.ccdoit.com域名重新申请了,忘了截图......)

image.png

image.png

image.png

image.png

至此,基于阿里云免费数字证书配置Nginx私服的过程就这么多。下面会再介绍一种开发过程中经常用到的证书配置方式。

使用OpenSSL自签证书配置https

—— 本地开发使用

在日常的开发中,使用OpenSSL工具生成自签证书的方式来配置HTTPS协议是比较常用的一种方案,下面就开始对这个配置过程做一个详细的介绍。

O penSSL 具一般会预装在系统中,如果系统中缺少该工具,请自行安装。
  1. 生成CSR文件(参考上文的CSR文件生成方式,或者直接修改下面的csr.config配置,核心是修改alt_names下的DNS配置)
[req]
default_bits = 2048
distinguished_name = req_distinguished_name
req_extensions = req_ext
x509_extensions = v3_ca
  [req_distinguished_name]
countryName = CN
countryName_default = CN
stateOrProvinceName = ZJ
stateOrProvinceName_default = ZJ
localityName = HZ
localityName_default = HZ
organizationName = FE
organizationName_default = FE
organizationalUnitName = IT
organizationalUnitName_default = IT
commonName = ccCrt
commonName_default = ccCrt
commonName_max = 64
  [req_ext]
subjectAltName = @alt_names
[v3_ca]
subjectAltName = @alt_names
[alt_names]
DNS.1 = *.lanchen.com
DNS.2 = *.lanchen.cn

使用OpenSSL命令行生成自签证书和私钥

# 生成自签名证书
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout server.key -out server.crt -config csr.
  1. 执生完成后,会得到证书文件(server.crt)和秘钥串(server.key)
  2. 然后将生成的server.crt证书添加到系统证书,并修改证书信任为【始终信任】

image.png

image.png

image.png

127.0.0.1   demo.lanchen.com
127.0.0.1   demo.lanchen.cn


image.png

到第6步为止,本地配置HTTPS协议的过程基本完成,但是在日常的开发工作中,Vite/Webpack Server启动时默认都会携带服务端口(3000),形如:

image.png

如果直接通过配置的域名后加端口是行不通的,例如直接通过 https://demo.lanchen.cn:3000 是无法访问到该服务的,那如何在Nginx层解决端口配置的问题?答案是通过在nginx.conf中增加一个端口变量来拼接代理的实际路径。Nginx文件配置如下

server {
  listen       443 ssl;
  server_name ~^(?<port>.+).lanchen.cn$;
  ssl_certificate      ssl-test/server.crt;
  ssl_certificate_key  ssl-test/server.key;
  ssl_session_cache    shared:SSL:1m;
  ssl_session_timeout  5m;
  ssl_ciphers  HIGH:!aNULL:!MD5;
  ssl_prefer_server_ciphers  on;
  location / {
    proxy_pass   http://127.0.0.1:$port;
  }
}

host中增加待访问的域名

127.0.0.1   3000.lanchen.cn 
br

结果验证

image.png注意事项

  1. 如果生成的证书不指定DNS扩展会出现什么问题?


image.png

自签证书不添加信任会出现什么问题?

image.png

image.png

小结

本篇文章先通过阿里云提供的免费数字证书配置过程,完成了线上Nginx私服的HTTPS协议配置,然后又基于OpenSSL工具生成自签证书,解决本地开发环境依赖HTTPS协议的情况。相信基于第一篇关于HTTPS的理论介绍,你应该很容易就能理解本篇的配置过程。希望这两篇关于HTTPS的浅析能够对你的日常研发过程有所帮助。


相关文章
|
7月前
|
安全 算法 网络协议
解析:HTTPS通过SSL/TLS证书加密的原理与逻辑
HTTPS通过SSL/TLS证书加密,结合对称与非对称加密及数字证书验证实现安全通信。首先,服务器发送含公钥的数字证书,客户端验证其合法性后生成随机数并用公钥加密发送给服务器,双方据此生成相同的对称密钥。后续通信使用对称加密确保高效性和安全性。同时,数字证书验证服务器身份,防止中间人攻击;哈希算法和数字签名确保数据完整性,防止篡改。整个流程保障了身份认证、数据加密和完整性保护。
|
10月前
|
安全 算法 网络安全
HTTPS原理
HTTPS 通过加密、数字证书、握手过程等多种手段,确保了网络通信的安全和可靠。它为用户提供了更高级别的隐私保护和数据安全,是现代互联网中重要的安全保障机制。随着网络安全威胁的不断增加,HTTPS 的应用也越来越广泛,成为保障网络安全的重要基石。
563 70
|
9月前
|
安全 算法 网络协议
【网络原理】——图解HTTPS如何加密(通俗简单易懂)
HTTPS加密过程,明文,密文,密钥,对称加密,非对称加密,公钥和私钥,证书加密
|
9月前
|
网络协议 安全 网络安全
探索网络模型与协议:从OSI到HTTPs的原理解析
OSI七层网络模型和TCP/IP四层模型是理解和设计计算机网络的框架。OSI模型包括物理层、数据链路层、网络层、传输层、会话层、表示层和应用层,而TCP/IP模型则简化为链路层、网络层、传输层和 HTTPS协议基于HTTP并通过TLS/SSL加密数据,确保安全传输。其连接过程涉及TCP三次握手、SSL证书验证、对称密钥交换等步骤,以保障通信的安全性和完整性。数字信封技术使用非对称加密和数字证书确保数据的机密性和身份认证。 浏览器通过Https访问网站的过程包括输入网址、DNS解析、建立TCP连接、发送HTTPS请求、接收响应、验证证书和解析网页内容等步骤,确保用户与服务器之间的安全通信。
487 3
|
10月前
|
安全 算法 网络协议
网易面试:说说 HTTPS 原理?HTTPS 如何保证 数据安全?
45岁老架构师尼恩在其读者交流群中分享了关于HTTP与HTTPS的深入解析,特别针对近期面试中常问的HTTPS相关问题进行了详细解答。文章首先回顾了HTTP的工作原理,指出了HTTP明文传输带来的三大风险:窃听、篡改和冒充。随后介绍了HTTPS如何通过结合非对称加密和对称加密来解决这些问题,确保数据传输的安全性。尼恩还详细解释了HTTPS的握手过程,包括如何通过CA数字证书验证服务器身份,防止中间人攻击。最后,尼恩强调了掌握这些核心技术的重要性,并推荐了自己的技术资料,帮助读者更好地准备面试,提高技术水平。
|
网络协议 网络安全
【网络安全 | HTTP】 gopher协议原理、语法及利用总结
【网络安全 | HTTP】 gopher协议原理、语法及利用总结
711 0
|
缓存 网络协议 算法
(二)Java网络编程之爆肝HTTP、HTTPS、TLS协议及对称与非对称加密原理!
作为一名程序员,尤其是Java程序员,那必须得了解并掌握HTTP/HTTPS相关知识。因为在如今计算机网络通信中,HTTP协议的作用功不可没,无论是日常上网追剧、冲���、亦或是接口开发、调用等,必然存在HTTP的“影子”在内。尤其对于WEB开发者而言,HTTP几乎是每天会打交道的东西。
262 10
|
安全 算法 网络协议
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
【在Linux世界中追寻伟大的One Piece】HTTPS协议原理
119 2
|
安全 搜索推荐 数据安全/隐私保护
深入探讨HTTPS协议的原理和工作流程
【2月更文挑战第10天】
478 4
深入探讨HTTPS协议的原理和工作流程
|
安全 算法 网络协议
HTTP 和 HTTPS 协议原理【网络基础】
HTTP 和 HTTPS 协议原理【网络基础】
197 1