一文理解ssh,ssl协议以及应用

在使用基于密钥的认证方式的时候,私钥的位置一定要符合远程服务器规定的位置,否则找不到私钥的位置会导致建立ssh连接失败

SSH 全称是 "Secure Shell",即安全外壳协议。

它是一种网络协议,用于在不安全的网络中安全地进行远程登录和其他网络服务。SSH 通过加密机制和认证机制,能够防止网络通信中的信息泄露、中间人攻击等安全威胁。

  1. 加密机制
    • SSH 采用了多种加密算法来确保数据传输的安全性。例如,它可以使用对称加密算法(如 AES)来加密传输的数据,同时利用非对称加密算法(如 RSA 或 ED25519)来进行密钥交换。在数据传输过程中,通信双方会协商出一个对称加密密钥,然后使用这个密钥对数据进行加密和解密,从而保证数据在网络中的保密性。
  2. 认证机制
    • 基于密码的认证:这是比较常见的一种方式,用户在登录远程系统时,通过输入用户名和密码来进行身份认证。不过这种方式相对安全性稍低,因为密码可能会被窃取或破解。
    • 基于 **密钥**的认证:如前面在 Git SSH 认证过程中所介绍的,用户生成一对公私钥,将公钥放置在远程服务器上,通过私钥来进行身份认证。这种方式更加安全,因为私钥只要妥善保管,就很难被他人获取和冒用。
    • 其他认证方式:还包括基于主机的认证等方式。SSH 会综合使用这些认证方式来确保只有合法的用户和主机能够建立连接并进行通信。

git的ssh认证过程

  1. SSH认证过程概述
    • 生成密钥对
      • 首先,在本地机器上使用ssh - keygen命令生成一对SSH密钥,包括一个私钥(例如<font style="color:#DF2A3F;">id_rsa</font>)和一个公钥(例如<font style="color:#DF2A3F;">id_rsa.pub</font>)。私钥需要妥善保管在本地,而公钥可以发送到远程服务器进行身份验证。这个过程就像是制作了一把锁(私钥)和对应的钥匙(公钥)。
    • 添加公钥到远程服务器
      • 将本地生成的公钥内容添加到远程服务器(如代码托管平台的服务器)的用户账户设置或仓库相关设置的SSH密钥管理部分。这一步就相当于把钥匙交给了服务器,告诉服务器"持有对应私钥的人是被允许访问的"。
    • 发起SSH连接请求
      • 当在本地使用git命令(如git clonegit pushgit pull)通过SSH协议访问远程仓库(例如git@code.byted.org:repository.git)时,本地的git客户端会发起一个SSH连接请求到远程服务器。
    • 服务器验证身份
      • 远程服务器收到请求后,会检查发送过来的SSH连接请求中的公钥信息。服务器会查找之前存储的已授权公钥列表,看是否能找到匹配的公钥。如果找到匹配的公钥,服务器会生成一个随机的挑战(challenge),并使用对应的公钥进行加密,然后将加密后的挑战发送回本地客户端。
    • 本地响应挑战
      • 本地客户端收到加密后的挑战后,会使用本地保存的私钥进行解密。因为只有拥有正确私钥的客户端才能成功解密这个挑战,这就验证了客户端的身份。解密后的内容会被发送回服务器。
    • 服务器确认身份并建立连接
      • 服务器收到客户端返回的解密后的挑战内容,会将其与自己最初发送的挑战进行比较。如果两者一致,服务器就确认客户端的身份是合法的,然后建立SSH连接,允许客户端访问远程仓库相关的操作。
  2. 原理深入理解
    • 非对称加密原理
      • SSH认证基于非对称加密算法(如RSA或ED25519)。在非对称加密中,密钥对由一个私钥和一个公钥组成。公钥可以公开,任何人都可以用它来加密信息,但只有拥有对应的私钥才能解密这些信息。在SSH认证过程中,这种特性被用来验证客户端的身份,确保只有持有正确私钥的客户端才能成功响应服务器的挑战。
    • 安全机制保障
      • 防止中间人攻击 :SSH通过在首次连接时将远程服务器的公钥指纹(一种公钥的摘要信息)存储在本地的known - hosts文件中来防止中间人攻击。当再次连接时,会检查服务器返回的公钥指纹是否与本地存储的一致。如果不一致,会发出警告,提示可能存在中间人攻击。例如,当你看到"Warning: Permanently added 'code.byted.org' (ED25519) to the list of known hosts."这样的提示,说明你的本地机器正在将服务器的公钥信息添加到已知主机列表中,用于后续连接的安全性验证。
      • 私钥权限控制 :私钥文件的权限非常关键。如前面提到的,私钥文件应该设置严格的权限(如0600),以防止其他用户访问私钥。因为如果私钥被泄露,攻击者就可以伪装成合法用户访问远程资源。所以当权限设置不当(如0755权限)时,SSH会拒绝使用该私钥进行认证,以保障安全性。

其他ssh认证过程

  1. 远程服务器管理
    • 系统管理系统管理员使用SSH连接到远程服务器(例如Linux服务器)进行系统维护和管理 。他们可以通过SSH登录到服务器,执行命令来安装软件包、配置服务、更新系统等操作。例如,使用ssh root@server - ip(假设root是管理员账户,server - ip是服务器的IP地址)登录到服务器后,就可以像在本地终端一样执行命令,如yum install - y httpd(在基于RPM的系统上安装Apache HTTP服务器)或apt - get update && apt - get upgrade(在Debian或Ubuntu系统上更新软件包)。
    • 故障排除 :当服务器出现问题时,技术人员可以通过SSH连接到服务器来检查系统日志、进程状态、网络配置等信息,以诊断和解决问题。例如,通过ssh登录后,使用tail - f /var/log/messages命令查看系统日志的实时更新,或者使用ps - aux命令查看正在运行的进程列表,以确定是否有异常进程导致服务器故障。
  2. 文件传输(SFTP和SCP)
    • SFTP(SSH File Transfer Protocol) :这是**一种基于SSH协议的安全文件传输协议**。用户可以使用SFTP客户端(如命令行的sftp命令或图形化的FileZilla等工具)通过SSH连接到远程服务器,在本地和远程系统之间安全地传输文件。例如,使用命令行的sftp user@server - ip登录到服务器后,可以使用put命令将本地文件上传到服务器(如put local - file.txt remote - file.txt),或者使用get命令从服务器下载文件(如get remote - file.txt local - file.txt)。
    • SCP(Secure Copy Protocol) :SCP也是基于SSH的文件传输工具,它在命令行中使用更方便。例如,使用scp local - file.txt user@server - ip:/remote/directory/可以将本地文件local - file.txt复制到远程服务器的/remote/directory/目录下;使用scp user@server - ip:/remote/file.txt local - directory/可以将远程服务器上的/remote/file.txt文件下载到本地的local - directory/
  3. 数据库管理(远程数据库访问)
    • MySQL数据库管理 :数据库管理员可以通过SSH隧道来安全地访问远程MySQL数据库。首先通过SSH连接到服务器,然后在本地机器上配置MySQL客户端,使其通过SSH隧道连接到远程数据库服务器。例如,使用ssh - L 3306:localhost:3306 user@server - ip命令建立一个本地端口3306到远程服务器3306端口(MySQL默认端口)的SSH隧道。之后,在本地使用MySQL客户端连接到localhost:3306,就可以像直接连接到本地数据库一样管理远程MySQL数据库。
    • 其他数据库类似操作:对于其他数据库(如PostgreSQL、Oracle等)也可以采用类似的**SSH隧道技术**来实现安全的远程访问。通过这种方式,可以在保证数据传输安全的基础上,进行数据库的查询、插入、更新和删除等操作。
  4. 容器和云服务管理
    • Docker容器管理 :在云环境或远程服务器上管理Docker容器时,有时需要通过SSH连接到服务器来执行<font style="color:#DF2A3F;">docker</font>命令。例如,通过SSH登录到运行Docker的服务器后,使用docker ps命令查看正在运行的容器列表,使用docker exec - it container - id /bin/bash命令进入容器内部的命令行界面,以进行容器内的配置和管理工作。
    • 云服务管理:在使用云服务(如亚马逊AWS、谷歌云GCP、微软Azure等)时,用户可能需要通过SSH连接到云服务器实例来进行配置和管理。例如,在AWS EC2实例上,用户可以使用SSH连接到实例,安装和配置Web服务器软件,将应用程序部署到服务器上,以实现基于云的Web应用服务。

与SSL对比

SSL(Secure Sockets Layer)即安全套接层协议,它是一种用于在网络通信中保障数据安全的加密协议。SSL 协议主要应用在诸如网页浏览、电子邮件、即时通讯等各种网络服务场景中,以下是详细介绍:

历史背景与发展

  • SSL 协议最初是由网景公司(Netscape)在 1994 年开发的,目的是为了解决互联网通信中的数据安全问题。随着互联网的发展,SSL 协议不断演进,后来被 IETF(互联网工程任务组)标准化为 TLS(Transport Layer Security)协议,从技术上来说,TLS 可以看作是 SSL 的后续版本,但在日常交流中,很多人仍然习惯用 SSL 来指代这种加密通信协议。

工作原理

  • 加密机制
    • SSL 采用了多种加密算法来保护数据安全。首先,在 SSL 握手阶段(稍后详细介绍这个阶段),通信双方会协商出一个对称加密密钥,这个密钥用于对后续传输的数据进行加密和解密。例如,常见的对称加密算法有 AES(高级加密标准)。同时,为了安全地交换这个对称加密密钥,SSL 还会使用非对称加密算法,如 RSA(Rivest - Shamir - Adleman)。非对称加密算法使用一对密钥,公钥可以公开用于加密,私钥则由接收方保密用于解密。
    • 除了对称和非对称加密,SSL 还会使用消息认证码(MAC)来保证数据的完整性。MAC 可以确保数据在传输过程中没有被篡改,通过对数据和密钥进行特定的运算,生成一个固定长度的认证码,接收方在收到数据后可以使用相同的算法和密钥进行验证。
  • 认证机制
    • 服务器认证:在 SSL 通信中,最常见的是服务器认证。服务器会向客户端发送其数字证书,数字证书是由权威的证书颁发机构(CA)颁发的,包含了服务器的公钥和一些身份信息,如服务器的域名等。客户端会验证证书的有效性,包括检查证书是否由信任的 CA 颁发、证书是否过期、证书中的域名是否与实际访问的域名一致等。通过这种方式,客户端可以确认服务器的身份是真实可靠的。
    • 客户端认证(可选):在一些安全性要求较高的场景中,也会要求客户端向服务器提供身份认证。客户端认证的方式可以是通过数字证书,也可以是其他方式,如用户名 / 密码组合等。

SSL 协议的工作流程(以浏览器访问网站为例)

  • SSL 握手阶段
    • 客户端发起请求:当用户在浏览器中输入一个以 "https://" 开头的网址并请求访问时,浏览器(客户端)会向服务器发送一个包含 SSL 协议版本号、加密算法套件列表等信息的请求,告知服务器自己支持的 SSL 通信方式。
    • 服务器响应并发送证书:服务器收到请求后,会选择一个双方都支持的加密算法套件,并将自己的数字证书发送给客户端。同时,服务器还会发送一个包含服务器临时公钥的密钥交换信息。
    • 客户端验证证书并生成密钥:客户端收到服务器的证书后,会对证书进行验证。如果证书验证通过,客户端会使用证书中的服务器公钥来加密一个随机生成的对称加密密钥(这个密钥将用于后续的数据加密),并将加密后的密钥发送给服务器。同时,客户端还会发送一个经过加密的预主密钥(Pre - Master Secret),这个预主密钥与之前生成的对称加密密钥一起用于生成最终的会话密钥。
    • 服务器解密并生成会话密钥:服务器收到客户端发送的加密信息后,使用自己的私钥解密得到对称加密密钥和预主密钥,然后通过一系列的算法与客户端共同生成最终的会话密钥。至此,SSL 握手阶段完成,双方已经协商出了用于数据加密的会话密钥。
  • 数据传输阶段
    • 双方使用协商好的会话密钥对数据进行对称加密,然后在网络中传输。例如,当浏览器向服务器发送网页请求数据(如表单数据)时,会使用会话密钥进行加密;服务器返回的网页内容也会使用会话密钥进行加密,这样就保证了数据在传输过程中的保密性。同时,通过消息认证码(MAC)机制来保证数据的完整性,确保数据没有被篡改。

应用场景

  • 网站安全访问(HTTPS):这是 SSL 协议最广泛的应用场景。通过在网站服务器上配置 SSL 证书,网站可以从传统的 "http://" 协议升级为 "https://" 协议。当用户访问使用 HTTPS 协议的网站时,浏览器和网站服务器之间的数据传输是加密的,用户的隐私信息(如登录密码、信用卡信息等)得到有效保护。例如,电商网站、银行网站等对安全性要求较高的网站都普遍采用 HTTPS 协议来保障交易安全。
  • 电子邮件安全:SSL 协议也可以用于保护电子邮件的传输安全。例如,在使用 POP3(邮局协议第 3 版)或 IMAP(互联网邮件访问协议)接收邮件,以及使用 SMTP(简单邮件传输协议)发送邮件时,可以通过 SSL/TLS 加密来防止邮件内容在传输过程中被窃取或篡改。用户在配置邮件客户端时,可以设置使用 SSL 加密连接,如常见的设置 "SSL/TLS 加密" 选项。
  • 虚拟专用网络(VPN):在 VPN 技术中,SSL 协议也发挥着重要作用。SSL - VPN 是一种基于 SSL 协议的 VPN 解决方案,它允许用户通过浏览器或专门的客户端软件,使用 SSL 加密通道连接到企业内部网络或其他受限制的网络。相比传统的 IPsec - VPN,SSL - VPN 具有更好的易用性和兼容性,用户可以在不同的操作系统和设备上方便地建立安全连接。

对比

1. 应用场景

  • SSL
    • 主要用于保障网络应用层数据的安全传输,最典型的应用是在Web浏览器和Web服务器之间通过HTTPS(HTTP over SSL/TLS)协议进行安全通信。例如,当你在网上购物输入银行卡信息时,SSL确保这些敏感信息在从浏览器传输到电商服务器过程中的安全。同时,也广泛应用于电子邮件传输(如IMAP、POP3、SMTP协议的SSL加密版本)、部分VPN(SSL - VPN)等场景,重点在于保护不同网络应用中数据传输的保密性和完整性。
  • SSH
    • 侧重于提供安全的远程登录和远程命令执行功能。比如系统管理员通过SSH登录到远程服务器进行系统维护、配置管理,开发人员通过SSH连接到代码仓库服务器进行代码的拉取、推送操作等。此外,也可用于基于SSH协议的文件传输(如SFTP和SCP),方便在本地和远程系统之间安全地传输文件。

2. 工作层次

  • SSL
    • 工作在传输层(TCP/IP协议栈)之上,应用层之下,对应用层的数据进行加密和认证处理。它可以被视为是为应用层协议(如HTTP、SMTP等)添加了一层安全防护层,使这些应用能够在不安全的网络环境中安全地传输数据。
  • SSH
    • 本身是一个完整的协议,主要用于远程登录和远程系统管理等功能,从协议层次上看,它也可以理解为是一种应用层协议,不过其功能更聚焦于远程系统的访问和操作安全。

3. 加密方式

  • SSL
    • 采用了对称加密和非对称加密相结合的方式。在SSL握手阶段,通信双方先通过非对称加密(如RSA)交换对称加密密钥,之后使用对称加密算法(如AES)对实际传输的数据进行加密。同时,为确保数据完整性,还会使用消息认证码(MAC)机制。这种方式在保证数据安全的同时,利用对称加密的高效性来提高数据传输效率。
  • SSH
    • 同样使用对称加密和非对称加密。例如,在基于密钥的认证方式中,使用非对称加密进行身份认证(通过公私钥对),而在数据传输过程中,也可以使用对称加密来加密传输的数据。不过SSH在具体的加密算法选择和密钥交换细节上与SSL有所不同。

4. 认证方式

  • SSL
    • 重点在于服务器认证。在典型的HTTPS通信中,服务器会向客户端(浏览器)发送数字证书,客户端验证证书的合法性,包括证书的颁发机构(CA)是否可信、证书是否过期、证书中的域名与访问的域名是否一致等,以确认服务器身份。在一些双向认证场景下,客户端也可能需要向服务器提供证书进行认证。
  • SSH
    • 认证方式更加多样化。可以基于密码进行认证,即用户输入用户名和密码登录远程系统;也可以基于密钥认证,通过公私钥对来验证用户身份;还可以有基于主机的认证等方式。在基于密钥认证时,本地客户端的私钥与远程服务器上存储的公钥进行匹配验证。
相关推荐
菜了再学6 小时前
pycharm连接ssh,conda创建新的python环境
python·pycharm·ssh
冬天vs不冷12 小时前
Shell编程详解
linux·ssh
vvw&21 小时前
如何在 Ubuntu 24.04 上安装 Drupal CMS 11 并配置 Nginx, MariaDB 和 SSL 教程
linux·运维·服务器·nginx·ubuntu·ssl·mariadb
无名之逆1 天前
搭建SSL邮件服务器
开发语言·网络·网络协议·http·https·ssl·request
周公挚友1 天前
nodejs实现https://localhost在window系统自签名99年+授信
nodejs·ssl
Elastic 中国社区官方博客1 天前
如何 cURL Elasticsearch:进入 Shell
大数据·服务器·数据库·elasticsearch·搜索引擎·ssh·全文检索
小马超会养兔子1 天前
如何下载OpenHarmony源码 + ssh连接
ssh·鸿蒙·openharmony
caridle2 天前
使用SSH建立内网穿透,能够访问内网的web服务器
服务器·前端·ssh
Web极客码3 天前
CDN SSL&TLS以及安全
网络协议·安全·ssl