Ssl certificate 对于SSL MQTT,CA是否需要密钥和证书

Ssl certificate 对于SSL MQTT,CA是否需要密钥和证书,ssl-certificate,elixir,mqtt,nerves-project,Ssl Certificate,Elixir,Mqtt,Nerves Project,当我试图连接到代理时,我用SSL启动了mosquitto代理,使用CA、cert和key。elixir中的库要求我将密钥和cert与certifi放在一起。当我查看certifi时,它显示了CA列表。我们可以使用这个自签名吗 Tortoise.Supervisor.start_child( client_id: "smart-spoon", handler: {Tortoise.Handler.Logger, []}, server: { Tortoise.T

当我试图连接到代理时,我用SSL启动了mosquitto代理,使用CA、cert和key。elixir中的库要求我将密钥和cert与certifi放在一起。当我查看
certifi
时,它显示了CA列表。我们可以使用这个自签名吗

Tortoise.Supervisor.start_child(
    client_id: "smart-spoon",
    handler: {Tortoise.Handler.Logger, []},
    server: {
      Tortoise.Transport.SSL,
      host: host, port: port,
      cacertfile: :certifi.cacertfile(),
      key: key, cert: cert
    },
    subscriptions: [{"foo/bar", 0}])
我应该把钥匙和证书放在客户端吗??我认为这是非常糟糕的,因为密钥是机密的。请帮助我了解它是如何工作的。

对于“正常”SSL连接,如果客户端希望证明代理是他们声称的代理,那么客户端只需要CA证书列表来检查代理提供的证书。在这种情况下,通常应将
证书
字段留空


如果您正在执行相互身份验证的SSL,而客户机也在向代理证明他们是谁,那么您需要向客户机提供其自己的证书/密钥(不是来自代理的证书/密钥,但可能[但不是必需的]由同一CA签名)

我无法通过CA对证书进行签名,对吗?我可以使用自签名证书来完成这些工作吗。并将其添加到certifi?如果您正在执行相互身份验证SSL,那么这里您是在谈论客户端SSL身份验证吗?是的,
相互身份验证SSL
是关于客户端身份验证的。对于自签名证书,只需用代理证书替换
certifi.cacertfile()