生成并导出证书 - Linux - OpenSSL

VPN 网关点到站点 (P2S) 连接可配置为使用证书身份验证。 根证书公钥会上传到 Azure,每个 VPN 客户端必须在本地安装相应的证书文件才能连接。 本文介绍如何使用 OpenSSL 创建自签名根证书和生成客户端证书。 有关详细信息,请参阅点到站点配置 - 证书身份验证

先决条件

若要使用本文,必须拥有运行 OpenSSL 的计算机。

自签名根证书

本部分介绍如何生成自签名根证书。 生成证书后,导出根证书公钥数据文件。

  1. 可参考以下示例生成自签名根证书。

    openssl genrsa -out caKey.pem 2048
    openssl req -x509 -new -nodes -key caKey.pem -subj "/CN=VPN CA" -days 3650 -out caCert.pem
    
  2. 以 base64 格式打印自签名根证书公共数据。 这是 Azure 支持的格式。 按照 P2S 配置步骤,将此证书上传到 Azure。

    openssl x509 -in caCert.pem -outform der | base64 -w0 && echo
    

客户端证书

在本部分中,你将生成用户证书(客户端证书)。 证书文件在运行命令的本地目录中生成。 可以在每台客户端计算机上使用相同的客户端证书,或生成特定于每个客户端的证书。 客户端证书必须由根证书签名。

  1. 若要生成客户端证书,请参考以下示例。

    export PASSWORD="password"
    export USERNAME=$(hostnamectl --static)
    
    # Generate a private key
    openssl genrsa -out "${USERNAME}Key.pem" 2048
    
    # Generate a CSR (Certificate Sign Request)
    openssl req -new -key "${USERNAME}Key.pem" -out "${USERNAME}Req.pem" -subj "/CN=${USERNAME}"
    
    # Sign the CSR using the CA certificate and CA key
    openssl x509 -req -days 365 -in "${USERNAME}Req.pem" -CA caCert.pem -CAkey caKey.pem -CAcreateserial -out "${USERNAME}Cert.pem" -extfile <(echo -e "subjectAltName=DNS:${USERNAME}\nextendedKeyUsage=clientAuth")
    
  2. 若要验证客户端证书,请参考以下示例。

    openssl verify -CAfile caCert.pem caCert.pem "${USERNAME}Cert.pem"
    

后续步骤

若要继续配置步骤,请参阅点到站点证书身份验证