这种客户端 SSL 方式是否足够安全,可以让黑客远离我的 Web 应用程序?

信息安全 tls 阿帕奇 ubuntu
2021-08-20 04:54:22

我想知道以下步骤是否足以保护我的云服务,也就是说非授权用户无法使用我的网络应用程序?

换句话说,是否有可能绕过这种保护?

所以步骤是:

创建证书颁发机构根(代表此服务器)

组织和通用名称:此服务器 CA 的一些人工标识符。

openssl genrsa -des3 -out ca.key 4096
openssl req -new -x509 -days 365 -key ca.key -out ca.crt

创建客户端密钥和 CSR

组织和通用名称 = 人名

openssl genrsa -des3 -out client.key 4096
openssl req -new -key client.key -out client.csr
# self-signed
openssl x509 -req -days 365 -in client.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out client.crt

将客户端密钥转换为 PKCS

这样它就可以安装在大多数浏览器中。

openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

将客户端密钥转换为(组合)PEM

将 client.crt 和 client.key 组合成单个 PEM 文件,用于使用 openssl 的程序。

openssl pkcs12 -in client.p12 -out client.pem -clcerts

在客户端设备(操作系统或浏览器)上安装客户端密钥

使用客户端.p12。实际说明有所不同。在 nginx 上安装 CA 证书

这样 Web 服务器就知道根据内部 CA 证书请求(并验证)用户的客户端密钥。

ssl_client_certificate /path/to/ca.crt;
ssl_verify_client optional; # or `on` if you require client key

https://gist.github.com/mtigas/952344#create-a-certificate-authority-root-which-represents-this-server

我的虚拟主机如下所示:

SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile "cert/ca.crt"

有什么建议吗?

1个回答

是的,这已经足够安全了。

我建议检查:

perl: $ENV{'SSL_CLIENT_M_SERIAL'}

在您的网络应用程序中。这意味着您必须拥有一个有效用户数据库,以及他们在 Web 应用程序中可能拥有的权限。

这样做而不是撤销“PKI 方式”更好,因为你首先不需要管理 CRL,而且更容易放入用户真正允许做的事情,所以你可以让用户拥有不同的权限,例如一些用户可能是管理员,一些可能是版主,一些只是普通用户,还有一些是受限用户。

因此,首先,他们的证书必须由客户端 CA 签名,而且他们的证书序列需要在数据库中有效。请务必小心,以免生成具有相同序列号的多个用户证书。在需要数字用户 ID 的模块中,序列号也可以用作数字用户 ID。