Ssl 在ejabberd中安装TLS证书以进行STARTTLS协商

Ssl 在ejabberd中安装TLS证书以进行STARTTLS协商,ssl,xmpp,ejabberd,starttls,Ssl,Xmpp,Ejabberd,Starttls,我读到ejabberd建议使用STARTTLS协商来实现通信实体之间的安全连接。当我安装ejabberd时,默认情况下它附带一个TLS证书 那么,为什么我需要购买证书才能安装?既然我们有默认证书,那么从证书颁发机构购买新证书的目的是什么 当我在计算机上部署ejabberd时,默认证书将如何用于我的域?客户端将如何验证默认证书?您可以将ejabberd与SSL/STARTTLS一起使用,并提供TLS证书。但是,该证书只是一个自签名证书。这意味着: 您仍然能够加密客户端和服务器之间的通信量 您的客户

我读到ejabberd建议使用STARTTLS协商来实现通信实体之间的安全连接。当我安装ejabberd时,默认情况下它附带一个TLS证书

那么,为什么我需要购买证书才能安装?既然我们有默认证书,那么从证书颁发机构购买新证书的目的是什么


当我在计算机上部署ejabberd时,默认证书将如何用于我的域?客户端将如何验证默认证书?

您可以将ejabberd与SSL/STARTTLS一起使用,并提供TLS证书。但是,该证书只是一个自签名证书。这意味着:

  • 您仍然能够加密客户端和服务器之间的通信量
  • 您的客户端将无法检查服务器是否是它假装的域。要知道证书可以被信任,客户端需要以某种方式引用信任机构
  • 在第二种情况下,这意味着如果中间网络设备(即Wifi接入点)试图模拟您的服务器,它可以向用户提供任何自签名证书,假装是您的域

    因此,您完全可以使用自签名证书来加密流量,但为了保护用户免受中间人攻击,您需要找到一种方法,让客户端现在可以信任证书

    这可以通过从可信机构购买证书(认证您的证书域)或让客户端支持定义良好的证书列表来实现。这称为证书固定,但是它需要将可接受的证书列表构建到客户端中,这可能是不可能的

    在你的情况下可能没问题,所以购买证书不是强制性的。
    但是,即使计划使用自签名证书,也不要使用默认的ejabberd自签名证书。ejabberd提供的证书与您自己的域不匹配。您至少应该生成与实际XMPP域相匹配的自签名证书:

    客户端将验证证书是否针对Jabber ID(JID)的域名颁发,该域名是“@”后面的部分。(还有其他选项,但它们与浏览器供应商针对CAs实施的策略不兼容,因此不实用。)

    除非您已经与证书颁发机构(CA)建立了业务关系,否则我建议任何人使用并远离自签名证书

    可以在链接的wiki页面中找到一些关于自动执行此操作并对Let's Encrypt服务器友好的说明

    摘要(假设您正在运行Ubuntu 16.04 LTS,希望在域example.org上运行它,并且只使用ejabberd的证书):

    使用以下内容创建
    /usr/local/sbin/auto-renew-letsencrypt

    #!/bin/bash # Renew all Let's Encrypt certificates which are due for renewal t=`mktemp` # Try to be quiet unless an error is returned letsencrypt renew > $t || cat $t # Hooks are not yet supported by `letsencrypt` shipping with Ubuntu 16.04 LTE # Crudely emulate --renew-hook; breaks if diagnostic messages change if grep -q "The following certs have been renewed" $t; then cat /etc/letsencrypt/live/example.org/{privkey,fullchain}.pem > /etc/ejabberd/ejabberd.pem service ejabberd reload fi rm $t #!/bin/bash #更新所有到期的证书,让我们加密这些证书 t=`mktemp` #除非返回错误,否则尽量保持安静 letsencrypt续订>$t | | cat$t #Ubuntu 16.04 LTE附带的“letsencrypt”还不支持挂钩 #粗略模拟——更新挂钩;如果诊断消息更改,则中断 如果grep-q“以下证书已更新”$t;然后 cat/etc/letsencrypt/live/example.org/{privkey,fullchain}.pem>/etc/ejabberd/ejabberd.pem 服务ejabberd重新加载 fi rm$t 运行以下命令创建并激活证书和自动续订

    apt install letsencrypt letsencrypt certonly --standalone --domain example.org cat /etc/letsencrypt/live/example.org/{privkey,fullchain}.pem > /etc/ejabberd/ejabberd.pem chown ejabberd:ejabberd /etc/ejabberd/ejabberd.pem chmod 640 /etc/ejabberd/ejabberd.pem chmod 755 /usr/local/sbin/auto-renew-letsencrypt echo $(($RANDOM % 60)) $((RANDOM % 6)) "* * * root /usr/local/sbin/auto-renew-letsencrypt" > /etc/cron.d/auto-renew-letsencrypt apt安装letsencrypt letsencrypt certonly--独立--domain example.org cat/etc/letsencrypt/live/example.org/{privkey,fullchain}.pem>/etc/ejabberd/ejabberd.pem chown-ejabberd:ejabberd/etc/ejabberd/ejabberd.pem chmod 640/etc/ejabberd/ejabberd.pem chmod 755/usr/local/sbin/auto-renew-letsencrypt echo$($RANDOM%60))$($RANDOM%6))“***root/usr/local/sbin/auto-renew-letsencrypt”>/etc/cron.d/auto-renew-letsencrypt
    @迈克尔解释得很好。为什么您建议不要使用ejabberd证书?背后有什么具体原因吗?提供的自我证书使用的是一个通用域,而不是您的实际域。最好至少在证书中使用您自己的域。另请参阅本节末尾和ejabberd 17.11的发布信息,网址为