首页 > 其他分享 >https简介

https简介

时间:2023-08-20 22:45:53浏览次数:46  
标签:加密 https 证书 简介 HTTPS 服务器 私钥 客户端

HTTPS(全称:HyperText Transfer Protocol Secure)是超文本传输协议的安全版本。它用于在计算机网络上传输网页,特别是世界范围网上的网页。与 HTTP 相比,HTTPS 的主要优势是,它通过使用加密协议(例如 SSL/TLS)对数据进行加密,从而提供了一个安全的通道来保护用户的数据免受窃听、篡改和消息伪造。

以下是 HTTPS 的一些关键点:

  1. 加密: 使用 HTTPS 时,传输的数据会被加密,这使得数据在传输过程中被截取时难以读取和理解。

  2. 数据完整性: HTTPS 确保在传输过程中数据不会被篡改。

  3. 认证: 它可以证明您的用户正在与正确的服务器通信,不是中间人攻击者。

  4. 安全指示器: 大多数浏览器在地址栏中显示一个锁图标,表明当前连接是安全的。这可以让用户知道他们的数据是安全的。

使用 HTTPS 对于所有网站来说都是有益的,但对于涉及敏感数据交换的网站(如网上银行、电子商务网站或任何需要用户登录的服务)来说尤其重要。近年来,互联网的许多组织和专家都倡导“HTTPS Everywhere”的原则,即所有网站都应默认使用 HTTPS,以保护用户隐私和网站数据的完整性。

是的,Go 语言(通常称为 Golang)支持 HTTPS。Go 标准库中的 net/httpcrypto/tls 包提供了对 HTTP 和 HTTPS 服务及客户端的广泛支持。您可以轻松地创建支持 HTTPS 的服务器或使用 HTTPS 协议发起请求。

以下是使用 Go 创建一个简单的 HTTPS 服务器的示例:

package main

import (
	"fmt"
	"net/http"
)

func handler(w http.ResponseWriter, r *http.Request) {
	fmt.Fprintf(w, "Hello, HTTPS!")
}

func main() {
	http.HandleFunc("/", handler)

	// 为 HTTPS 服务加载证书和私钥
	err := http.ListenAndServeTLS(":443", "path/to/certfile.crt", "path/to/privatekey.key", nil)
	if err != nil {
		panic("Failed to start server: " + err.Error())
	}
}

在上面的示例中,ListenAndServeTLS 函数需要证书文件和私钥文件的路径。这些文件通常由证书颁发机构(CA)提供,但也可以使用如 Let's Encrypt 的服务免费获得,或使用工具如 mkcert 为开发和测试环境创建。

如果您是客户端,使用 HTTPS 发起请求也很简单。只需使用 http 包中的 Get 或其他相关函数即可,Go 会自动处理 HTTPS:

resp, err := http.Get("https://example.com")

Go 语言为 HTTPS 提供了很好的支持,无论是在服务器端还是客户端。

部署 HTTPS 服务器需要证书文件和私钥文件,主要是为了支持 SSL/TLS 协议,确保数据的加密传输和服务器的身份验证。以下是这两个文件的详细描述和它们的用途:

  1. 证书文件(通常为 .crt 或 .pem 文件):

    • 身份验证: 证书包含了服务器的公钥和一些关于服务器的身份信息(例如域名、组织名称等)。当客户端首次连接到 HTTPS 服务器时,服务器会发送其证书给客户端。客户端使用证书确认服务器的身份并确保它正在与预期的服务器通信,而不是中间人攻击者。
    • 公钥: 证书中的公钥用于加密数据。客户端可以使用这个公钥加密信息,然后只有拥有相应私钥的服务器才能解密它。
    • 颁发机构签名: 有效的证书是由受信任的证书颁发机构(CA)签名的。客户端通常有一组受信任的 CA 列表,它会检查服务器的证书是否由这些 CA 签名,从而验证证书的真实性和有效性。
  2. 私钥文件(通常为 .key 或 .pem 文件):

    • 解密: 当客户端使用服务器证书中的公钥加密数据时,只有服务器的私钥才能解密这些数据。因此,私钥必须保密且只能在服务器上。
    • 身份验证: 在 SSL/TLS 握手过程中,服务器使用私钥对某些信息进行签名,证明其确实拥有与公开证书匹配的私钥。客户端可以使用服务器的公证书来验证这个签名,确保它正在与持有私钥的正确服务器通信。

为了安全考虑,私钥文件必须妥善保管,并且不应该被泄露。如果私钥被泄露,那么与其相关的证书的安全性将会受到威胁,可能被恶意实体用于中间人攻击。在这种情况下,应该立即吊销受影响的证书并获取新的证书和私钥。

HTTPS 通信背后的安全机制是基于 SSL/TLS 协议。以下是 HTTPS 握手过程中的基本流程,描述了服务端和客户端如何使用证书、公钥和私钥进行通信:

  1. 客户端与服务器建立连接:

    • 客户端(通常是 Web 浏览器)发起对服务器的 HTTPS 请求。
    • 服务器响应并开始 TLS 握手过程。
  2. 服务器发送证书:

    • 服务器发送其 SSL/TLS 证书给客户端。这个证书包含服务器的公钥、服务器的身份信息(如域名、组织等)以及一个受信任的证书颁发机构(CA)的签名。
  3. 客户端验证证书:

    • 客户端首先检查证书是否已过期,是否被吊销。
    • 然后,客户端检查证书是否由其内置的受信任的 CA 列表中的 CA 签名。如果不是由受信任的 CA 签名的,客户端会发出警告。
    • 客户端还会验证证书中的身份信息,例如确保证书中的域名与请求的域名匹配。
  4. 密钥交换:

    • 客户端生成一个随机的对称密钥,称为“会话密钥”或“pre-master secret”。这个密钥将用于后续的加密数据交换。
    • 客户端使用服务器证书中的公钥加密这个会话密钥,并将其发送回服务器。
    • 服务器使用其私钥解密收到的信息,从而获得会话密钥。
  5. 双方确认:

    • 客户端和服务器现在都有了会话密钥。双方发送消息确认已完成密钥交换并开始使用会话密钥进行加密通信。
  6. 加密的数据传输:

    • 一旦握手完成,客户端和服务器就开始使用之前交换的会话密钥对所有传输的数据进行对称加密和解密。
    • 由于会话密钥是对称的(即客户端和服务器都使用同一个密钥进行加密和解密),这种加密方式在性能上比非对称加密更高效。
  7. 会话结束:

    • 当会话结束时,双方可以丢弃会话密钥。如果客户端和服务器后续需要再次通信,他们通常会进行一个新的握手过程以生成新的会话密钥。

这个流程确保了三个关键的安全属性:加密(eavesdroppers 无法读取数据),完整性(数据在传输过程中不被修改)和身份验证(确认通信双方的身份)。

相比于 HTTP,HTTPS 主要增加了安全性。以下是 HTTP 与 HTTPS 之间的主要不同点:

  1. 安全性:

    • HTTP: 数据在客户端与服务器之间明文传输,可能被中间人截取并查看。
    • HTTPS: 数据在客户端与服务器之间加密传输,即使被截取,也难以被解密和查看。
  2. 端口号:

    • HTTP: 默认使用端口 80。
    • HTTPS: 默认使用端口 443。
  3. 证书与身份验证:

    • HTTP: 不使用证书,没有身份验证。
    • HTTPS: 服务器通常需要一个由证书颁发机构(CA)颁发的 SSL/TLS 证书。客户端(如浏览器)会验证服务器的证书以确保其正在与真实、合法的服务器通信。
  4. URL 前缀:

    • HTTP: 网址以 "http://" 开头。
    • HTTPS: 网址以 "https://" 开头。
  5. 加密机制:

    • HTTP: 无加密。
    • HTTPS: 使用 SSL/TLS 加密协议进行数据加密。
  6. 性能与资源消耗:

    • HTTP: 由于没有加密和解密的过程,HTTP 在性能上较 HTTPS 稍快,并且对资源的消耗较少。
    • HTTPS: 初始的 SSL/TLS 握手可能增加连接时的延迟,而加密和解密也会增加计算负担。但随着技术的进步和现代硬件的支持,这些差异逐渐变得微不足道。
  7. 搜索引擎排名:

    • HTTP: 通常不会受益于安全性作为搜索排名的因素。
    • HTTPS: 某些搜索引擎(例如 Google)已将 HTTPS 作为其搜索排名算法的一个因素,这意味着 HTTPS 网站可能在搜索结果中获得稍高的排名。
  8. 用户信任:

    • HTTP: 现代浏览器可能会在地址栏中标记 HTTP 网站为“不安全”。
    • HTTPS: 大多数浏览器会为 HTTPS 网站显示一个绿色的锁图标或其他安全标志,增加用户对网站的信任度。

尽管 HTTPS 引入了一些额外的复杂性和开销,但其安全性和隐私优势使得它成为现代 Web 上的首选,特别是当涉及敏感数据(如密码、信用卡信息、个人信息等)传输时。

标签:加密,https,证书,简介,HTTPS,服务器,私钥,客户端
From: https://www.cnblogs.com/tangjicheng/p/17644773.html

相关文章

  • 无涯教程-PHP - 简介
    PHP(全称:PHP:HypertextPreprocessor,即“PHP:超文本预处理器”)是一种开源的通用计算机脚本语言,尤其适用于网络开发并可嵌入HTML中使用。PHP的语法借鉴吸收C语言、Java和Perl等流行计算机语言的特点,易于一般程序员学习。PHP的主要目标是允许网络开发人员快速编写动态页面,但PHP也......
  • 8-20|https://gitlab.xx.com/api/v4/projects/4/trigger/pipeline Request failed 状
    当你使用GitLabAPI并收到状态码400,这通常意味着你发送的请求是“坏的”或格式不正确。以下是一些建议,帮助你解决问题:1.**验证请求正文**:确保你提供的请求正文(如果有的话)是正确的并符合API的预期格式。对于触发管道的API,你可能需要提供有关分支、变量等的信息。2.**检查URL*......
  • 请大家支持博客园,购买VIP会员,https://cnblogs.vip
    很多认识我的朋友都是读到我的文章而来的,博客园是国内最早的技术博客平台,近二十年来始终如一地保持本色,不忘初心,为广大的技术爱好者经营着一块相对干净的田地。我也是最早的一批博主之一吧,在那个物资还没有很丰富,相对单纯的年代,天南地北的朋友们,以文会友,追一些大牛的系列文章跟......
  • GO语言简介与基本语法概述
    本文的目标本文通过对Go基本语法进行简要概述,旨在通过短时间内的学习即可掌握基本的Go语法,并切实参与到实际Go项目的开发中。Go语言简介Go语言由来自Google公司的RobertGriesemer,RobPike和KenThompson于2007年9月开始设计和实现,然后于2009年的11月对外正式发布,被誉为“21世......
  • 01 简介、基础语法
    一、Python简介1、简介Python由荷兰数学和计算机科学研究学会的吉多范罗苏姆于1990年设计,Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言。2021年10月,语言流行指数的编译......
  • 无涯教程-TensorFlow - 简介
    TensorFlow是一个开源软件库,用于各种感知和语言理解任务的机器学习。目前被50个团队用于研究和生产许多Google商业产品,如语音识别、Gmail、Google相册和搜索,其中许多产品曾使用过其前任软件DistBelief。TensorFlow最初由谷歌大脑团队开发,用于Google的研究和生产,于2015年11月9日......
  • JavaScript中常见的数据结构和算法及其应用场景简介
    在JavaScript编程中,数据结构和算法是必不可少的组成部分。本文将介绍JavaScript中常见的数据结构和算法以及它们的应用场景。数据结构数组数组是JavaScript中最常见的数据结构之一。它是一种有序的集合,可以存储任意类型的数据。由于数组支持快速随机访问,因此它非常适合用于存......
  • RBAC(权限管理系统)简介
    权限在日常办公系统中算是一个比较常见的基本功能,对于存在有权限模块的系统中规定了登录用户能够操作哪些资源,不能够操作哪些资源。借助权限模块可以有效的控制参与到系统不同身份人员要具体做的操作,可以说一个成熟的后端系统离不开一个比较完善的权限管理系统。什么是RBAC?RBAC......
  • protojson简介
    google.golang.org/protobuf/encoding/protojson是Go语言中的一个库,用于处理ProtocolBuffers(protobuf)和JSON之间的转换,遵循https://protobuf.dev/programming-guides/proto3#json实现。以下是该库的一些主要功能:将protobuf消息转换为JSON格式:这是通过Marshal或Ma......
  • (一)Qt与Python—PySide的简介及安装
    目录1.Pyside的简介2.pyside的安装3.pyside的Helloworld程序4.参考文献及网站连接1.Pyside的简介​PySide(在本文中指代PySide2和PySide6)是一个Python的图形化界面(GUI)库,由C++版的Qt开发而来,在用法上基本与C++版没有特别大的差异。PySide是一个python绑定的跨平台图形化......