<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="">SSL/TLS 证书</string>
    <string name="">证书授权机构</string>
    <string name="">证书授权机构（CA）是一种可信实体，负责对数字证书进行签名，以便用户验证其真实性。由于服务器证书数量庞大且更新频繁，为每台服务器单独存储所有证书并不现实。因此，用户只需存储有限数量的根证书，即可在需要时验证服务器证书。</string>
    <string name="">Boost.Asio 提供多种加载证书授权机构证书的方法：</string>
    <string name="">* [@boost:/doc/html/boost_asio/reference/ssl__context/add_certificate_authority.html `net::ssl::context::add_certificate_authority`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/add_verify_path.html `net::ssl::context::add_verify_path`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/load_verify_file.html `net::ssl::context::load_verify_file`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/set_default_verify_paths.html `net::ssl::context::set_default_verify_paths`]</string>
    <string name="">设置对端验证非常重要，这样当证书验证失败时，TLS/SSL 握手也会随之失败：</string>
    <string name="">客户端还需验证证书中的主机名或 IP 地址是否与预期一致。[@boost:/doc/html/boost_asio/reference/ssl__host_name_verification.html `net::ssl::host_name_verification`] 这个辅助函数对象，可以按照 RFC 6125 描述的规则来完成验证：</string>
    <string name="">服务器也可以请求并验证客户端证书，以对客户端进行身份认证：</string>
    <string name="">服务器证书</string>
    <string name="">服务器证书是一种数字证书，用于确认服务器身份是客户端的合法目的地。它包含可验证的签名，用于确保证书由受信任的证书授权机构（CA）签发。</string>
    <string name="">当服务器证书由中间证书授权机构签发，且客户端缺少这些中间证书时，服务器应向客户端提供所有相关证书。这使得客户端能够根据根证书验证证书链中的最终证书。</string>
    <string name="">以下 Boost.Asio 方法可用于加载单个证书或证书链：</string>
    <string name="">* [@boost:/doc/html/boost_asio/reference/ssl__context/use_certificate.html `net::ssl::context::use_certificate`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/use_certificate_file.html `net::ssl::context::use_certificate_file`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/use_certificate_chain.html `net::ssl::context::use_certificate_chain`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/use_certificate_chain_file.html `net::ssl::context::use_certificate_chain_file`]</string>
    <string name="">客户端证书</string>
    <string name="">服务器可以通过要求并验证客户端证书来对客户端进行身份认证，从而阻止没有有效证书和私钥的客户端访问。服务器通过修改对端验证设置来实施这一机制：</string>
    <string name="">若使用该机制，则需将必要的 CA 证书加载到服务器的 SSL 上下文中，以便能够验证客户端的证书。</string>
    <string name="">通用名称与主题备用名称</string>
    <string name="">主题备用名称（SAN）是 X.509 证书中的一种扩展字段，允许将多个域名、子域名或 IP 地址关联到同一张 SSL/TLS 证书上。在此之前，证书主题中的通用名称字段只能包含单个主机名。</string>
    <string name="">该建议指出，如果证书中包含 SAN 的 dNSName 字段，客户端必须忽略主题 CN 字段。某些现代浏览器（例如 Google Chrome）仅检查 SSL/TLS 证书中的 SAN 部分，并拒绝仅包含 CN 字段的证书。</string>
    <string name="">私钥</string>
    <string name="">证书的私钥在 SSL/TLS 握手过程中是必需的，用于证明证书的提供方是该证书的合法所有者。</string>
    <string name="">以下 Boost.Asio 方法可用于加载私钥：</string>
    <string name="">* [@boost:/doc/html/boost_asio/reference/ssl__context/use_private_key.html `net::ssl::context::use_private_key`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/use_private_key_file.html `net::ssl::context::use_private_key_file`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/use_rsa_private_key.html `net::ssl::context::use_rsa_private_key`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/use_rsa_private_key_file.html `net::ssl::context::use_rsa_private_key_file`]</string>
    <string name="">如果私钥受密码保护，可以使用 [@boost:/doc/html/boost_asio/reference/ssl__context/set_password_callback.html net::ssl::context::set_password_callback] 设置一个可调用对象，用于获取该密码。</string>
    <string name="">自签名证书与自颁发证书</string>
    <string name="">自颁发证书是指证书的颁发者与主体为同一实体。</string>
    <string name="">自签名证书是一种自颁发证书，其数字签名可使用证书内的公钥进行验证。</string>
    <string name="">安装不受信任、自颁发或自签名的 CA 证书会带来安全风险。</string>
    <string name="">Diffie-Hellman（DH）参数</string>
    <string name="">Diffie-Hellman（DH）密钥交换是一种密码学协议，允许双方在不安全的通信通道上安全地建立共享密钥。该密钥交换过程涉及双方约定一组参数，即 Diffie-Hellman 参数，其中包括一个大素数 `p` 和一个生成元 `g`。由于生成这些参数是一项计算开销较大的任务，用户可能更倾向于在启动时提供预先计算好的值。</string>
    <string name="">以下 Boost.Asio 方法可用于加载 DH 参数：</string>
    <string name="">* [@boost:/doc/html/boost_asio/reference/ssl__context/use_tmp_dh.html `net::ssl::context::use_tmp_dh`]\n* [@boost:/doc/html/boost_asio/reference/ssl__context/use_tmp_dh_file.html `net::ssl::context::use_tmp_dh_file`]</string>
    <string name="">如果未提供 DH 参数，OpenSSL 将拒绝执行任何使用基于 DHE 的加密套件的握手，但仍可与其他加密套件（例如基于 ECDHE 的套件）正常工作。</string>
    <string name="">自颁发证书示例</string>
    <string name="">在以下示例中，将生成一个自签名的 CA 证书，并使用该证书来签发服务器证书和客户端证书。</string>
    <string name="">* 生成 CA 证书：</string>
    <string name="">``` openssl req -new -newkey rsa:4096 -keyout ca.key -x509 -out ca.crt -subj \"/CN=localhost\" -days 365 ```</string>
    <string name="">* 生成服务器证书签名请求（CSR）：</string>
    <string name="">``` openssl req -new -newkey rsa:4096 -keyout server.key -out server.csr -subj \"/CN=localhost\" -addext \"subjectAltName=DNS:localhost,IP:127.0.0.1\" ```</string>
    <string name="">* Sign the Server CSR using our CA:</string>
    <string name="">``` openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -copy_extensions copy -days 365 -out server.crt ```</string>
    <string name="">* 生成客户端证书签名请求（CSR）：</string>
    <string name="">``` openssl req -new -newkey rsa:4096 -keyout client.key -out client.csr -subj \"/CN=client.1\" ```</string>
    <string name="">* 使用 CA 对客户端 CSR 进行签名：</string>
    <string name="">``` openssl x509 -req -in client.csr -CA ca.crt -CAkey ca.key -days 365 -out client.crt ```</string>
    <string name="">* 生成 DH 参数文件：</string>
    <string name="">``` openssl dhparam -out dh4096.pem 4096 ```</string>
    <string name="">服务器端示例：[path_link example/doc/ssl/server.cpp server.cpp]</string>
    <string name="">注意，该服务器的配置方式要求对客户端证书进行请求和验证。如果需要禁用此功能，可以注释掉示例中的相关代码行。</string>
    <string name="">可以使用以下 cURL 命令测试该服务器：</string>
    <string name="">``` curl https://localhost:8080 --cacert ca.crt --cert client.crt --key client.key ```</string>
    <string name="">此外，也可以使用客户端示例：[path_link example/doc/ssl/client.cpp client.cpp]</string>
</resources>
