我刚刚按照本教程为 Asterisk 添加了安全性:
https://wiki.asterisk.org/wiki/display/AST/Secure+Calling+Tutorial#SecureCallingTutorial-Keys
请注意,默认情况下,asterisk 不会与 srtp 一起安装。为了能够遵循该教程,您必须安装带有 libsrtp 和 pjsip 的 asterisk。以下是我安装 asterisk 以支持 srtp 的方法:
# (1) make sure everything is up to date
apt-get update
apt-get upgrade
# (2) Install dependencies that will be needed in order to install asterisk pjproject etc...
apt-get install aptitude -y
aptitude install build-essential -y
aptitude install git -y
aptitude install libssl-dev -y
aptitude install zlib1g-dev -y
aptitude install openssl -y
aptitude install libxml2-dev -y
aptitude install libncurses5-dev -y
aptitude install uuid-dev -y
aptitude install sqlite3 -y
aptitude install libsqlite3-dev -y
aptitude install pkg-config -y
aptitude install libjansson-dev -y
# (3) make sure everything is up to date again
apt-get update
apt-get upgrade
# (4) Install libsrtp (library used to encrypt rtp)
cd /root
wget https://github.com/cisco/libsrtp/archive/v1.6.0.tar.gz
tar -xzf v1.6.0.tar.gz
cd libsrtp-1.6.0
./configure CFLAGS=-fPIC --prefix=/usr
make
make runtest
make install
cd ..
# (5) install pjproject
git clone https://github.com/asterisk/pjproject pjproject
cd pjproject
./configure --prefix=/usr --enable-shared --disable-sound --disable-resample --disable-video --disable-opencore-amr --with-external-srtp
make dep
make
make install
cd ..
# (6) Install Asterisk WITH SRTP AND PJPROJECT
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-13-current.tar.gz
tar xvf asterisk-13-current.tar.gz
cd asterisk-13.19.2
./configure --with-pjproject --with-ssl --with-srtp
make
make install
make samples
make config
无论如何,这不是问题的一部分。
因此我按照教程操作并且能够拨打加密电话。
当我重复这些步骤以连接所有手机时我不明白为什么我必须为每个 SIP 设备生成一个证书。服务器已经有一个证书,为什么手机需要另一个证书?换句话说,我不明白为什么我必须执行教程中的步骤:
“我们为我们的 SIP 设备生成客户端证书”
./ast_tls_cert -m client -c /etc/asterisk/keys/ca.crt -k /etc/asterisk/keys/ca.key -C phone1.mycompany.com -O "My Super Company" -d /etc/asterisk/keys -o malcolm
因此,出于好奇,我决定跳过其中一部手机的这一步。我没有为手机 X 生成客户端证书,但出于某种原因,手机 X 仍然能够连接到 Asterisk 并拨打电话。手机 X 在拨打电话时也会在屏幕上显示锁定,这意味着通话已加密。Asterisk 显示通话正在通过 SRTP 进行。我无法区分具有客户端证书的手机和手机 X。所以我的问题是为什么教程会告诉您生成客户端证书?
答案1
我之前曾在 Asterisk 中使用过 SRTP,而不需要客户端证书,但正如指出的那样,这允许您根据证书颁发者控制访问并保证 SIP 请求的来源。
这样您就可以验证电话是由您设置的,而不是由某个随机找到您的 SIP 服务器的人设置的。就像使用 TLS 时服务器出示证书一样,由于难以生成有效的重复证书,您可以确认服务器不是随机的中间人攻击。如果您是唯一可以为 SIP 设备颁发证书的人,那么只有那些拥有您的证书的设备才是真正的设备,其他一切都只是骗局。
从这里开始并按照以下路径进行相互认证:https://en.wikipedia.org/wiki/Client_certificate还有这个:https://en.wikipedia.org/wiki/AAA_(computer_security)
SRTP 只是一种加密机制,它允许你在开放网络上使用 Wireshark 之类的工具时阻止其他人窃听对话。想象一下你当地咖啡店的开放 wifi。然而,只有 SRTP 本身不足以保证安全;仅仅因为通信是加密的,并不意味着源或目的地是有效的。