使用curl命令的SSL/TLS:安全连接指南

2023-10-25

卷曲命令是一种发出网络请求的工具,它在通过 HTTPS 与安全服务器通信时使用 SSL/TLS。

默认情况下,curl尝试在可用时使用安全连接,但了解如何控制和诊断这些连接至关重要。

 

 

使用客户端证书

您可以使用--cert当您需要使用 SSL 客户端证书向远程服务器进行身份验证时,请选择此选项。

客户端证书是向服务器确认客户端身份的一种方式。它在仅需要用户名和密码来提高安全性的设置中特别有用。


curl --cert /path/to/certificate.pem:password https://secure.example.com
  

Output:


*   Trying 192.168.1.10...
* TCP_NODELAY set
* Connected to secure.example.com (192.168.1.10) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
...
< HTTP/1.1 200 OK
...
  

接下来的几行是 SSL/TLS 握手过程的详细细分,其中包括正在使用的协议版本(在本例中为 TLSv1.3)和其他相关元数据。

当服务器响应“HTTP/1.1 200 OK”时,表示连接和数据传输成功。

如果证书受密码保护,则在冒号后提供密码。

 

指定证书类型

curl在自动检测正确类型方面做得非常出色,但有时您需要显式指定证书类型。


curl --cert /path/to/certificate.der --cert-type DER https://secure.example.com
  

这个命令告诉curl连接时使用 DER 格式的客户端证书secure.example.com.

Output:


*   Trying 192.168.1.11...
* TCP_NODELAY set
* Connected to secure.example.com (192.168.1.11) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
...
< HTTP/1.1 200 OK
...
  

在这里,--cert选项指向客户端证书的位置。在本例中,它是 DER 编码的证书。

选项--cert-type DER tells curl所提供的客户端证书属于 DER 类型。

虽然 PEM 是默认(也是最常见)格式,但 DER 是 PEM 的二进制形式,用于特定环境。

 

使用私钥

私钥与证书一起使用,向服务器证明客户端的身份,而无需泄露密钥本身。


curl --cert /path/to/certificate.pem --key /path/to/privatekey.pem https://secure.example.com
  

该命令指示curl连接时使用客户端证书及其关联的私钥secure.example.com.

随着--key选项,你正在指挥curl到与客户端证书对应的私钥的位置。

请记住,虽然客户端证书是公开的并且可以共享,但私钥必须保密。

如果恶意行为者获得了私钥的访问权限,他们就可以在 SSL/TLS 通信中冒充证书所有者。

 

指定私钥类型

您可以显式指定私钥的类型以避免任何歧义。


curl --cert /path/to/certificate.pem --key /path/to/privatekey.der --key-type DER https://secure.example.com
  

该命令发出信号curl在建立连接时使用 DER 格式的客户端证书及其关联的私钥secure.example.com.


  

指定 CA 捆绑包

信任远程服务器需要信任的基础。该基础通常基于证书颁发机构 (CA) 的证书。

在许多系统中,默认情况下都有一组预定义的受信任 CA 证书。

但是,有时您需要使用自定义或私有 CA,或者只想指定不同的 CA 捆绑包。curl提供--cacert此类情况的选项。


curl --cacert /path/to/ca-bundle.crt https://custom-ca.example.com
  

在这里,你讲述的是curl连接到时使用特定的 CA 捆绑包来验证服务器的证书custom-ca.example.com.

Output:


*   Trying 192.168.1.14...
* TCP_NODELAY set
* Connected to custom-ca.example.com (192.168.1.14) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /path/to/ca-bundle.crt
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
...
< HTTP/1.1 200 OK
...
  

在此输出中,curl正在建立安全连接custom-ca.example.com,并且它利用提供的 CA 捆绑包在 SSL/TLS 握手期间验证服务器的证书。

分解命令的主要元素:

The --cacert /path/to/ca-bundle.crt选项指定 CA 捆绑包的路径curl应该使用。 CA 捆绑包包含一个或多个 CA 证书,curl会信任。

 

多个 CA 证书的目录

如果您有多个 CA 证书,将它们全部合并到一个 CA 捆绑文件中是不切实际的。

相反,您应该将每个 CA 证书保存在其自己的文件中并指向curl到所有这些证书所在的目录。这就是--capath选项进来了。


curl --capath /path/to/ca-directory/ https://multi-ca.example.com
  

通过这个命令,curl连接时将使用指定的目录来验证服务器的证书multi-ca.example.com.

Output:


*   Trying 192.168.1.15...
* TCP_NODELAY set
* Connected to multi-ca.example.com (192.168.1.15) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: /path/to/ca-directory/
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
...
< HTTP/1.1 200 OK
...
  

从输出中可以看到curl建立安全连接multi-ca.example.com。值得注意的是,在 SSL/TLS 握手期间,它利用指定目录中的 CA 证书来验证服务器的证书。

 

使用证书吊销列表

证书吊销列表 (CRL) 是通常由证书颁发机构 (CA) 维护的证书列表,这些证书在到期日期之前已被吊销,不应再受信任。

如果私钥被泄露或证书被错误颁发,则会被放置在 CRL 中。curl提供使用 CRL 的选项来确保它不信任已吊销的证书。


curl --crlfile /path/to/crlfile.pem https://revoked-cert.example.com
  

在此命令中,curl在与服务器建立连接之前,使用给定的 CRL 来验证服务器的证书未被吊销revoked-cert.example.com.

Output:


*   Trying 192.168.1.16...
* TCP_NODELAY set
* Connected to revoked-cert.example.com (192.168.1.16) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* Certificate did not match CRL
* Closing connection 0
* SSL certificate problem: certificate has been revoked
curl: (60) SSL certificate problem: certificate has been revoked
  

从这个输出来看,curl尝试安全连接revoked-cert.example.com.

在 SSL/TLS 握手期间,它检测到服务器的证书与提供的 CRL 上的条目匹配,因此连接被终止。

 

公钥固定

通过“固定”公钥,您可以明确定义客户端在建立安全连接时应期望使用哪个公钥或一组密钥。

这可以降低利用流氓证书进行中间人 (MitM) 攻击的风险,即使这些证书是由受信任的 CA 颁发的。


curl --pinnedpubkey /path/to/pubkey.pem https://pinned-server.example.com
  

通过这个命令,curl只会信任到的连接pinned-server.example.com如果服务器的公钥与提供的固定密钥匹配。

Output:


*   Trying 192.168.1.17...
* TCP_NODELAY set
* Connected to pinned-server.example.com (192.168.1.17) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* SSL certificate problem: public key does not match pinned public key
* Closing connection 0
curl: (60) SSL certificate problem: public key does not match pinned public key
  

在此示例输出中,curl正在尝试创建安全连接pinned-server.example.com.

然而,在 SSL/TLS 握手期间,它发现服务器的公钥与中提供的公钥不匹配pubkey.pem,导致连接终止。

 

选择特定的密码套件

有时,出于安全或兼容性原因,您想要指定哪些密码套件curl建立连接时应该使用(或避免)。

The --ciphers选项允许您制定此规范。


curl --ciphers 'ECDHE-RSA-AES128-GCM-SHA256' https://cipher-specific.example.com
  

通过执行这个命令,curl将尝试使用ECDHE-RSA-AES128-GCM-SHA256建立安全连接时的密码套件cipher-specific.example.com.

Output:


*   Trying 192.168.1.18...
* TCP_NODELAY set
* Connected to cipher-specific.example.com (192.168.1.18) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* SSL connection using TLSv1.3 / ECDHE-RSA-AES128-GCM-SHA256
...
< HTTP/1.1 200 OK
...
  

输出表明curl已建立安全连接cipher-specific.example.com使用指定的密码套件。

可以列出多个用冒号分隔的密码套件,从而允许curl根据服务器支持使用其中任何一个。

 

强制 TLS 版本

在某些情况下,由于服务器要求、测试需要或安全策略,希望强制使用特定版本的 TLS。

你可以强制curl使用特定版本的 TLS。这可以帮助确定是否有特定版本导致问题:

  • 对于 TLS 1.0:curl --tlsv1.0 https://example.com
  • 对于 TLS 1.1:curl --tlsv1.1 https://example.com
  • 对于 TLS 1.2:curl --tlsv1.2 https://example.com
  • 对于 TLS 1.3:curl --tlsv1.3 https://example.com

TLS 1.3 是最新版本,与之前的版本相比,引入了各种改进和安全增强功能。

 

设置允许的最大 TLS 版本

虽然使用最新版本来增强安全性通常是一个好主意,但在某些情况下,您需要限制最大 TLS 版本,无论是出于兼容性、测试还是过渡原因。curl提供--tls-max定义此上限的选项。


curl --tls-max 1.2 https://tls-specific.example.com
  

该命令指示curl连接到tls-specific.example.com最多使用 TLS 1.2 版本,即使客户端和服务器都支持更高版本。

Output:


*   Trying 192.168.1.19...
* TCP_NODELAY set
* Connected to tls-specific.example.com (192.168.1.19) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* SSL connection using TLSv1.2 / [Cipher Suite]
...
< HTTP/1.1 200 OK
...
  

从这个输出可以明显看出curl已成功建立安全连接tls-specific.example.com但将使用 TLS 版本 1.2,即使版本 1.3 或任何更新版本可用且受支持。

 

恢复先前的 TLS 会话

通过重用先前连接中的会话参数,您可以跳过部分握手过程,从而缩短连接时间。

curl提供--tls-session为此目的,可以选择利用先前会话的会话 ID。


curl --tls-session /path/to/session-id-file https://session-resume.example.com
  

Here, curl将尝试恢复之前的 TLS 会话session-resume.example.com使用存储在的会话详细信息session-id-file.

Output:


*   Trying 192.168.1.20...
* TCP_NODELAY set
* Connected to session-resume.example.com (192.168.1.20) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* SSL connection using TLSv1.3 / [Cipher Suite]
* Session resumption (using session ID)
...
< HTTP/1.1 200 OK
...
  

输出显示curl成功连接到session-resume.example.com并根据提供的会话 ID 恢复 TLS 会话,从而可能加快连接设置速度。

但是,要使会话恢复正常工作,客户端和服务器都必须支持它并且具有兼容的会话详细信息。

 

执行 TLS 身份验证

除了服务器提供其证书(如传统 SSL 中一样)之外,客户端还提供服务器验证的证书。

curl支持这种扩展的安全形式--tlsauthtype选项允许您指定要执行的 TLS 身份验证的类型。


curl --cert /path/to/client-cert.pem --key /path/to/client-key.pem --tlsauthtype SRP --tlsuser 'tlsusername' --tlspassword 'tlspassword' https://mutual-auth.example.com
  

在这个例子中,curl将尝试连接到mutual-auth.example.com使用安全远程密码 (SRP) 类型的 TLS 身份验证,同时还提供客户端证书和密钥。

Output:


*   Trying 192.168.1.21...
* TCP_NODELAY set
* Connected to mutual-auth.example.com (192.168.1.21) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* SSL connection using TLSv1.3 / [Cipher Suite]
* Server certificate:
*  ...
* Client certificate:
*  ...
* TLS SRP authentication successful
...
< HTTP/1.1 200 OK
...
  

输出展示了使用 SRP 成功进行的相互身份验证。服务器和客户端的证书都经过验证,确保已建立的连接具有更高级别的信任。

The --tlsuser and --tlspassword选项允许您提供用于 TLS 身份验证的用户名和密码。

 

需要 SSL/TLS

The --ssl-reqd选项中curl确保仅在使用 SSL/TLS 时才建立连接。


curl --ssl-reqd https://secure-only.example.com
  

Output:


*   Trying 192.168.1.24...
* TCP_NODELAY set
* Connected to secure-only.example.com (192.168.1.24) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* SSL connection using TLSv1.3 / [Cipher Suite]
...
< HTTP/1.1 200 OK
...
  

输出确认连接成功secure-only.example.com通过 SSL/TLS 加密通道。

 

尝试升级到 SSL/TLS

在连接启动时未加密但能够升级到安全 SSL/TLS 连接的情况下,--ssl选项中curl发挥作用。

使用时,curl将尝试升级连接以使用 SSL/TLS 加密,即使初始握手未加密,您也能享受安全通道的好处。


curl --ssl http://try-ssl.example.com
  

Output:


*   Trying 192.168.1.25...
* TCP_NODELAY set
* Connected to try-ssl.example.com (192.168.1.25) port 80 (#0)
* Issuing SSL/TLS upgrade request...
* Successfully upgraded to SSL/TLS
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
...
< HTTP/1.1 200 OK
...
  

从该输出中,您可以看到连接最初在端口 80(标准 HTTP 端口)上启动,然后发出 SSL/TLS 升级请求。

然后,连接已成功升级为 SSL/TLS 加密通道。

The --ssl选项是一个强大的工具,特别是在与支持“升级”标头的服务器交互时,允许从不安全连接过渡到安全连接。

 

禁用证书吊销检查

证书吊销是一项安全功能,其中被认为不可靠(由于泄露、过期或其他原因)的证书在其实际过期日期之前失效。

但是,在某些情况下,尤其是在测试或受控环境中,您希望禁用这些检查。

In curl, the --ssl-no-revoke选项允许这样做,但您应该谨慎使用它。


curl --ssl-no-revoke https://revocation-test.example.com
  

该命令指示curl连接时忽略证书吊销检查revocation-test.example.com.

Output:


*   Trying 192.168.1.27...
* TCP_NODELAY set
* Connected to revocation-test.example.com (192.168.1.27) port 443 (#0)
* WARNING: Certificate revocation checks disabled!
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: none
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
...
< HTTP/1.1 200 OK
...
  

输出显示一条警告,表明证书吊销检查已被禁用。

 

常见 SSL/TLS 错误故障排除

本节将指导您解决使用时可能遇到的一些常见 SSL/TLS 错误curl并提供解决方案来解决这些问题。

Curl 错误 SSL 验证失败

这意味着无法根据已知的证书颁发机构 (CA) 验证服务器提供的证书,或者可能存在与 SSL 证书相关的其他问题。

以下是一些潜在原因以及解决方法:

  1. 过期证书:服务器提供的 SSL 证书已过期。
  2. 自签名证书:该证书是自签名的,不是由已知的证书颁发机构颁发的。
  3. 主机名不匹配:证书的公用名 (CN) 或使用者备用名称 (SAN) 与服务器的主机名不匹配。
  4. 过时的 CA 商店:您系统上的 CA 存储可能已过时,并且可能没有验证服务器证书所需的证书。

故障排除步骤:

检查证书:您可以使用以下命令查看服务器的证书详细信息:


echo | openssl s_client -connect servername:443 | openssl x509 -text  

这将为您提供有关证书的详细信息,例如其到期日期和颁发者。

指定 CA 捆绑包:如果您有要用于验证的特定 CA 捆绑包,您可以使用--cacert option:


curl --cacert /path/to/ca-bundle.crt https://example.com  

更新 CA 商店:在某些系统上,您可能需要更新 CA 存储。该方法因系统而异。例如,在基于 Debian 的系统上,您可以使用:


sudo apt-get update && sudo apt-get install --reinstall ca-certificates  

检查代理:确保没有任何可能干扰您的连接的代理配置。如果代理已到位,则应正确配置它以处理 SSL/TLS 流量。

 

SSL 403 禁止

“403 Forbidden”是一个 HTTP 状态代码,表示服务器理解该请求,但拒绝授权。这可能是由于以下几个原因造成的:

  1. 缺乏权限:服务器可能被设置为拒绝访问您尝试访问的特定资源。
  2. 地理限制:某些 Web 服务器根据客户端的地理位置限制访问。
  3. IP黑名单:您的 IP 地址可能因可疑活动而被列入黑名单。
  4. 盗链保护:如果引荐来源网址不是来自同一域,某些 Web 服务器会阻止直接访问资源(例如图像)。
  5. 服务器配置错误:.htaccess 文件或其他服务器配置文件配置不正确。
  6. 访问规则限制:服务器可能对用户代理有特定的规则,并可能阻止来自curl默认情况下。
  7. SSL 证书问题:尽管 403 通常与授权有关,但服务器或客户端上配置错误的 SSL/TLS 设置可能会干扰正确的访问。

故障排除步骤:

使用详细模式: Using -v with curl可以给出更多关于请求和响应过程的细节:


curl -v https://example.com  

更改用户代理:某些服务器可能会阻止默认设置curl用户代理。你可以改变它-A:


curl -A "Mozilla/5.0" https://example.com  

用浏览器检查:在 Web 浏览器中打开该 URL,查看问题是否仍然存在。这可以帮助确定问题是否出在curl或服务器范围内。

仅检查标头:使用-I选项与curl仅获取标头。这可以提供线索,特别是如果有一个“位置”标头可能会重定向您:


curl -I https://example.com  

检查服务器日志:如果您有权访问服务器,请检查服务器日志(例如 Apache 的日志)error.log或者 Nginx 的error.log)了解有关请求被禁止的原因的更多详细信息。

SSL/TLS 配置:如果您怀疑错误与 SSL/TLS 相关,请检查服务器的配置。类似的工具Qualys SSL 实验室可以提供对服务器 SSL 设置的深入了解。

 

处理过期证书

当服务器的证书过期时,curl由于证书无效而拒绝建立连接。


curl https://expired-cert.example.com
  

Output:


*   Trying 192.168.1.28...
* TCP_NODELAY set
* Connected to expired-cert.example.com (192.168.1.28) port 443 (#0)
* SSL certificate problem: certificate has expired
* Closing connection 0
curl: (60) SSL certificate problem: certificate has expired
  

解决方案:

  • 解决此问题最安全的方法是更新服务器端的证书。
  • 出于测试目的,您可以使用绕过此检查--insecure标志,但不建议在生产环境中使用。

解决主机名不匹配的问题

当 URL 中提供的主机名与服务器提供的证书中的公用名 (CN) 或使用者备用名称 (SAN) 不匹配时,会出现此错误。


curl https://mismatched-host.example.com
  

Output:


*   Trying 192.168.1.29...
* TCP_NODELAY set
* Connected to mismatched-host.example.com (192.168.1.29) port 443 (#0)
* SSL: no alternative certificate subject name matches target host name 'mismatched-host.example.com'
* Closing connection 0
curl: (51) SSL: no alternative certificate subject name matches target host name 'mismatched-host.example.com'
  

解决方案:

  • 验证 URL 并确保您连接到正确的服务器。
  • 更新服务器的 SSL 证书以包含正确的 CN 或将所需的主机名添加到 SAN 字段。
  • 对于临时故障排除,--insecureflag 可用于忽略此错误,但从长远来看,这不是一个安全的解决方案。

处理不支持的协议或密码

如果客户端(在本例中,curl)并且服务器没有相互的 SSL/TLS 协议版本或密码套件,连接将失败。


curl https://unsupported-protocol.example.com
  

Output:


*   Trying 192.168.1.30...
* TCP_NODELAY set
* Connected to unsupported-protocol.example.com (192.168.1.30) port 443 (#0)
* SSL handshake failed due to unsupported protocol or cipher
* Closing connection 0
curl: (35) SSL handshake failed due to unsupported protocol or cipher
  

解决方案:

  • 检查服务器支持的协议和密码,然后确保您的curl客户支持他们。
  • 升级你的curl版本或服务器的 SSL/TLS 软件,以支持现代且安全的协议版本和密码。
  • 作为临时措施,您可以使用类似标志来指定特定的协议版本--tlsv1.2 or --tlsv1.3。但是,请始终确保您强制使用的版本受到两者的支持并且是安全的。

 

实际例子

抛开所有理论,理解的真正价值curl当应用于现实场景时,SSL/TLS 功能就会发挥作用。

让我们通过几个实际示例来展示如何使用curl在与 SSL/TLS 相关的日常任务中。

安全连接到网站

安全连接到网站是主要用例curl处理 SSL/TLS 时。

以下是您在执行此操作时如何确保最佳安全性的方法:


curl -I --tlsv1.3 --cacert /path/to/trusted/ca/certificate.pem https://secure-website.example.com
  

Output:


HTTP/2 200 
date: Fri, 25 Aug 2023 12:00:00 GMT
server: Apache/2.4.29
strict-transport-security: max-age=63072000; includeSubDomains
  

通过查看标头,您可以看到该网站使用 HTTP/2 并设置了“Strict-Transport-Security”标头,这表明它的安全配置良好。

  • -I仅获取标头,使其成为检查网站连接及其安全标头的轻量级方法。
  • --tlsv1.3确保您使用的是最新且安全的 TLS 版本。
  • --cacert允许您指定自定义证书颁发机构,确保服务器的证书根据您信任的证书进行验证。

调试 SSL/TLS 问题

如果您在连接站点时遇到问题,打开详细日志记录可以帮助您识别问题:


curl -v --tlsv1.3 https://problematic-website.example.com
  

Output:


*   Trying 192.168.1.31...
* TCP_NODELAY set
* Connected to problematic-website.example.com (192.168.1.31) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
    CApath: none
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS alert, handshake failure (512):
* error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
  

详细输出(-vflag)提供有关连接过程的详细信息。

在这里,您可以看到“警报握手失败”,这表明之间可能没有共享密码套件curl和服务器。

--tlsv1.3指定TLS版本,需要根据服务器的能力进行调整。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用curl命令的SSL/TLS:安全连接指南 的相关文章

  • ansible 重新启动 2.1.1.0 失败

    我一直在尝试创建一个非常简单的 Ansible 剧本 它将重新启动服务器并等待它回来 我过去在 Ansible 1 9 上有一个可以运行的 但我最近升级到 2 1 1 0 并且失败了 我正在重新启动的主机名为 idm IP 为 192 16
  • Locale.getDefault() 始终返回 en

    unix 机器上的服务器始终使用 en 作为默认区域设置 以下是区域设置输出 LANG en US LC CTYPE C LC NUMERIC C LC TIME C LC COLLATE C LC MONETARY C LC MESSAG
  • 如何修复“iptables:没有该名称的链/目标/匹配”?

    我在我的 Linux 嵌入式系统上构建并安装了 iptables 如果我列出所有规则 则一切正常 iptables list Chain INPUT policy ACCEPT target prot opt source destinat
  • bluetoothctl 到 hcitool 等效命令

    在 Linux 中 我曾经使用 hidd connect mmac 来连接 BT 设备 但自 Bluez5 以来 这种情况已经消失了 我可以使用 bluetoothctl 手动建立连接 但我需要从我的应用程序使用这些命令 并且使用 blue
  • 为什么我收到“无法进行二进制日志记录”的信息。在我的 MySQL 服务器上?

    当我今天启动 MySQL 服务器并尝试使用以下命令进行一些更改时用于 MySQL 的 Toad http www quest com toad for mysql 我收到此消息 MySQL 数据库错误 无法进行二进制日志记录 消息 交易级别
  • 如何检测并找出程序是否陷入死锁?

    这是一道面试题 如何检测并确定程序是否陷入死锁 是否有一些工具可用于在 Linux Unix 系统上执行此操作 我的想法 如果程序没有任何进展并且其状态为运行 则为死锁 但是 其他原因也可能导致此问题 开源工具有valgrind halgr
  • GLIBCXX_3.4.26 未找到在 BeagleBone 上运行交叉编译的程序

    我有以下程序 include
  • 为什么内核需要虚拟寻址?

    在Linux中 每个进程都有其虚拟地址空间 例如 32位系统为4GB 其中3GB为进程保留 1GB为内核保留 这种虚拟寻址机制有助于隔离每个进程的地址空间 对于流程来说这是可以理解的 因为有很多流程 但既然我们只有 1 个内核 那么为什么我
  • 无法从 jenkins 作为后台进程运行 nohup 命令

    更新 根据下面的讨论 我编辑了我的答案以获得更准确的描述 我正在尝试从詹金斯运行 nohup 命令 完整的命令是 nohup java jar home jar server process 0 35 jar prod gt gt var
  • 在哪里可以找到并安装 pygame 的依赖项?

    我对 Linux 比较陌生 正在尝试安装 python 的 pygame 开发环境 当我运行 setup py 时 它说我需要安装以下依赖项 我找到并安装了其中之一 SDL 然而 其他人则更加难以捉摸 Hunting dependencie
  • Linux 中的动态环境变量?

    Linux 中是否可以通过某种方式拥有动态环境变量 我有一个网络服务器 网站遵循以下布局 site qa production 我想要一个环境变量 例如 APPLICATION ENV 当我在 qa 目录中时设置为 qa 当我在生产目录中时
  • 加载数据infile,Windows和Linux的区别

    我有一个需要导入到 MySQL 表的文件 这是我的命令 LOAD DATA LOCAL INFILE C test csv INTO TABLE logs fields terminated by LINES terminated BY n
  • linux perf:如何解释和查找热点

    我尝试了linux perf https perf wiki kernel org index php Main Page今天很实用 但在解释其结果时遇到了困难 我习惯了 valgrind 的 callgrind 这当然是与基于采样的 pe
  • vector 超出范围后不清除内存

    我遇到了以下问题 我不确定我是否错了或者它是一个非常奇怪的错误 我填充了一个巨大的字符串数组 并希望在某个点将其清除 这是一个最小的例子 include
  • 尝试安装 LESS 时出现“请尝试以 root/管理员身份再次运行此命令”错误

    我正在尝试在我的计算机上安装 LESS 并且已经安装了节点 但是 当我输入 node install g less 时 出现以下错误 并且不知道该怎么办 FPaulMAC bin paul npm install g less npm ER
  • 两种情况或 if 哪个更快? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我必须制作一个 非常 轻的脚本 它将接受用户的选项并调用脚本中的函数来执行一些任务 现在我可以使用 IF 和 CASE 选项 但我想知道两
  • PHP 从命令行启动 gui 程序,但 apache 不启动

    首先 我阅读了有类似问题的人的一些帖子 但所有答案都没有超出导出 DISPLAY 0 0 和 xauth cookies 这是我的问题 提前感谢您的宝贵时间 我开发了一个小库 它使用 OpenGL 和 GLSL 渲染货架 过去几天我将它包装
  • 如何将目录及其子目录中的所有 PDF 文件复制到一个位置?

    如何全部复制PDF文件从目录及其子目录到单个目录 实际上还有更多的文件 并且深度有些任意 假设四个目录的最大深度是公平的 我想这些文件需要重命名 如果a pdf例如 位于多个目录中 因为我会adding https ebooks stack
  • 如何在apache 2.4.6上安装apxs模块

    我刚刚用过apt get update我的 apache 已更新为2 4 6 我想安装 apxs 来编译模块 但收到此错误 The following packages have unmet dependencies apache2 pre
  • iptables通过注释删除特定规则

    我需要删除一些具有相同评论的规则 例如 我有带有 comment test it 的规则 所以我可以像这样获得它们的列表 sudo iptables t nat L grep test it 但是我怎样才能删除所有带有注释 测试它 的 PR

随机推荐

  • 什么是中间人 (MITM) 攻击?

    A 中间人 MITM 攻击是一种常见的网络安全威胁 如果处理不当 可能会造成严重后果 在这种类型的攻击中 恶意行为者会拦截 中继并可能改变认为彼此直接通信的两方之间的通信 本文将深入探讨 MITM 攻击带来的威胁 攻击者使用的技术以及个人和
  • 如何利用技术进步实现完美的远程办公

    远程工作并不是一个新趋势 作家 记者和艺术家总是有机会在舒适的家中工作 尽管如此 远程办公始终与技术密切相关 在过去 远程工作人员依赖邮件服务和交通 随着这两个领域变得越来越好 越来越多的人能够在家执行工作任务 然而 直到互联网的出现 这种
  • 如何在 Debian 9 上设置 Apache 虚拟主机

    在本教程中 我们将引导您了解如何在 Debian 9 上设置 Apache 虚拟主机 Apache 虚拟主机允许您在一台计算机上托管多个域 使用虚拟主机时 您可以为每个域或子域指定不同的文档根 包含网站文件的目录 创建单独的安全策略 使用不
  • 如何在 CentOS 8 上安装 R

    R 是一种开源编程语言和免费环境 专门从事统计计算和图形表示 它由 R 统计计算基金会支持 主要供统计学家和数据挖掘人员用于开发统计软件和执行数据分析 本文介绍如何在 CentOS 8 上安装 R 先决条件 在继续本教程之前 请确保您已满足
  • 如何更改 SFTP 端口

    SFTP SSH 文件传输协议 是一种安全文件协议 用于通过加密连接在两台主机之间传输文件 它还允许您对远程文件执行各种文件操作并恢复文件传输 SFTP 可用作旧版 FTP 协议的替代品 它具有 FTP 的所有功能 但连接更安全 本文介绍如
  • 如何在 Ubuntu 18.04 上设置或更改时区

    在 Ubuntu 上 系统的时区是在安装过程中设置的 但以后可以轻松更改 使用正确的时区对于许多与系统相关的任务和流程都很重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于相同的时区 本教程演示如
  • 如何在 Debian 9 上安装 Yarn

    Yarn 是一个与 npm 兼容的 JavaScript 包管理器 它的创建是为了解决 npm 的一系列问题 例如通过并行操作加快软件包安装过程并减少与网络连接相关的错误 在本教程中 我们将指导您如何安装Yarn在 Debian 9 系统上
  • 如何在 Ubuntu 18.04 上安装 Django

    Django 是一个免费开源的高级 Python Web 框架 旨在帮助开发人员构建安全 可扩展和可维护的 Web 应用程序 有不同的方法来安装 Django 具体取决于您的需要 它可以在系统范围内安装 也可以使用 pip 安装在 Pyth
  • 如何在 Linux 中添加目录到 PATH

    当您在命令行上键入命令时 您基本上是在告诉 shell 运行具有给定名称的可执行文件 在Linux中 这些可执行程序就像ls find file和其他文件 通常位于系统上的几个不同目录中 存储在这些目录中的任何具有可执行权限的文件都可以从任
  • 如何在 CentOS 8 上设置或更改时区

    使用正确的时区对于许多与系统相关的任务和流程至关重要 例如 cron 守护进程使用系统的时区来执行 cron 作业 并且日志文件中的时间戳基于同一系统的时区 在 CentOS 上 系统的时区是在安装过程中设置的 但以后可以轻松更改 本文介绍
  • Python range() 函数

    蟒蛇rangetype 通过定义范围的起点和终点来生成整数序列 它通常与for循环迭代数字序列 range 在 Python 2 和 3 中的工作方式有所不同 在Python 2中 有两个函数可以让你生成整数序列 range and xra
  • Linux 中的正常运行时间命令

    在本教程中 我们将介绍uptime命令 顾名思义 uptime命令显示系统已经运行了多长时间 它还显示当前时间 登录用户数以及过去 1 5 和 15 分钟的系统负载平均值 如何使用正常运行时间命令 uptime 命令的语法如下 uptime
  • 如何在 CentOS 7 上使用 VSFTPD 设置 FTP 服务器

    FTP 文件传输协议 是一种标准的客户端 服务器网络协议 允许用户在远程网络之间传输文件 有多种可用于 Linux 的开源 FTP 服务器 最流行和最广泛使用的是PureFTPd ProFTPD and vsftpd 在本教程中 我们将在
  • Python while 循环

    循环是编程语言的基本概念之一 当您想要多次重复特定的代码块直到满足给定条件时 循环会很方便 Python中有两种基本的循环结构 for and while loops 本教程涵盖了以下基础知识whilePython 中的循环 我们还将向您展
  • NumPy loadtxt 教程(从文件加载数据)

    在之前的教程中 我们讨论过NumPy 数组 我们看到了它如何使读取 解析和对数字数据执行操作的过程变得轻而易举 在本教程中 我们将讨论 NumPy loadtxt 方法 该方法用于解析文本文件中的数据并将其存储在 n 维 NumPy 数组中
  • Linux Bash 脚本编写第 3 部分 – 参数和选项

    到目前为止 您已经了解了如何编写无需用户输入即可完成工作的 Linux bash 脚本 今天我们将继续我们的 Linux bash 脚本系列 如果您想了解我们在谈论什么 我建议您查看之前的帖子 Bash 脚本基础知识 Bash 脚本 For
  • Pythonnamedtuple(将元组提升到一个新的水平)

    在本教程中 我们将深入研究命名元组 它们是什么 如何创建和操作它们 以及何时使用它们 或不使用它们 命名元组是Python内置的一部分收藏模块 并且它们提供了一种将数据捆绑在一个名称下的便捷方法 它们是 Python 内置元组数据类型的子类
  • 使用 Python 处理 CSV:综合教程

    CSV 逗号分隔值 文件是存储和共享表格数据的最常见方法之一 这些文件由行和列组成 其中每行代表一个记录 列包含由分隔符 通常是逗号 分隔的值 Python 提供了多种内置方法来处理 CSV 文件 使您可以高效地读取 写入和操作数据 本教程
  • Linux Bash 脚本编写第 5 部分 – 信号和作业

    在上一篇文章中 我们谈到了输入 输出和重定向在 bash 脚本中 今天我们将学习如何在Linux系统上运行和控制它们 到目前为止 我们只能从命令行界面运行脚本 但这并不是运行 Linux bash 脚本的唯一方法 这篇文章描述了控制 Lin
  • 使用curl命令的SSL/TLS:安全连接指南

    卷曲命令是一种发出网络请求的工具 它在通过 HTTPS 与安全服务器通信时使用 SSL TLS 默认情况下 curl尝试在可用时使用安全连接 但了解如何控制和诊断这些连接至关重要 目录 hide 1 使用客户端证书 2 指定证书类型 3 使