我不是系统管理员或网络管理员(我有软件开发人员背景)。我发现按照本教程进行操作时遇到一些困难,无法实现SLL 客户端身份验证在 Ubuntu 20.04 版本上:https://www.makethenmakeinstall.com/2014/05/ssl-client-authentication-step-by-step/
我知道这个教程已经很旧了,但是除了一个问题之外,它似乎运行良好。
基本上,我执行了上一个教程中指示的所有步骤。我在这里总结了它们,以便您也可以给我反馈,看看我是否理解我所做的事情:
生成证书颁发机构 (CA) 证书:首先,我要创建一个 CA 证书。如果我理解得没错,这就像创建我自己的个人证书颁发机构(如 cacert.org),唯一的问题是,在这种情况下,没有机构可以验证此 CA 颁发的证书。这种理解正确吗?
openssl req -newkey rsa:4096 -keyform PEM -keyout ca.key -x509 -days 3650 -outform PEM -out ca.cer
基本上这个命令会要求我输入PEM 密码短语我将使用它与自己的 CA 进行交互并进行一些详细信息。我输入了以下参数:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Notariato
Organizational Unit Name (eg, section) []:.
Common Name (e.g. server FQDN or YOUR name) []:.*
Email Address []:[email protected]
笔记:在上一个答案中,我将通配符 (*) 用作通用名称,以便“忽略”证书的使用位置。这样可行吗?
因此此命令会生成一个癌我将使用该文件来生成我的服务器和客户端证书。
我生成我的 Apache 服务器 SSL 密钥和证书:这还不是客户端证书(客户端用来对服务器说:“我是一个经过认证的客户端!!!”),这是服务器证书,用来对客户端说:“我是正确的服务器,而不是中间人”。这样对吗?
要创建此服务器证书,首先我要生成服务器私钥:
openssl genrsa -out server.key 4096
然后我使用这个服务器私钥来生成证书生成请求。
openssl req -new -key server.key -out server.req -sha256
这里还询问我一些参数:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:IT
State or Province Name (full name) [Some-State]:.
Locality Name (eg, city) []:.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Notariato
Organizational Unit Name (eg, section) []:.
Common Name (e.g. server FQDN or YOUR name) []:*
Email Address []:[email protected]
笔记:另外,我在这里为通用名称添加了一个通配符 (*),以便“忽略”证书的使用位置。这样可以吗?
然后我使用证书生成请求和 CA 证书来生成服务器证书:
openssl x509 -req -in server.req -CA ca.cer -CAkey ca.key -set_serial 100 -extensions server -days 1460 -outform PEM -out server.cer -sha256
然后我尝试通过以下方式将证书安装到我的 Apache 中:
将 CA 证书复制到永久位置。我们需要在 Apache 中指定我们的 CA 证书,因为它是自生成的 CA,而不是所有操作系统都包含的 CA:
cp ca.cer /etc/ssl/certs/
将服务器证书和私钥复制到永久位置:
cp 服务器.cer /etc/ssl/certs/server.crt cp 服务器.key /etc/ssl/private/server.key
在 Apache 中激活 SSL 模块:
a2enmod ssl
在 Apache 中激活 SSL 站点并禁用 HTTP 站点:
a2ensite 默认-ssl a2dissite 默认
现在,我在最后一条命令上遇到了问题,根据最后两个命令的输出:
andrea@ubuntu:~/cert$ a2ensite default-ssl
Site default-ssl already enabled
andrea@ubuntu:~/cert$ a2dissite default
ERROR: Site default does not exist!
正如你所看到的,当我表演时a2dissite 默认我正在获得这个错误:站点默认值不存在!错误信息。
为什么?这意味着什么?出了什么问题?我该如何解决这个错误?