如何让 Skype 在限制出站端口、HTTPS 检查和启用 IE 代理的情况下正常运行?我遇到的所有文档都建议禁用至少其中一项功能。
理想情况下,它应该像将 Skype 中的代理设置为端口 8080 的前端服务器一样简单,但由于不断添加新的目标和源 HTTPS 检查排除的管理开销,他们使用自签名证书使这变得不可能。
我真正希望实现的是允许所有 Skype 流量出去,并且只允许 Skype 流量出去。
答案1
最后,我选择了一种方法,允许所有流量从 Skype 可执行文件流出,但不允许从其他任何文件流出。由于 Forefront 无法可靠地确定正在执行的可执行文件,因此我选择创建一条规则,允许特定用户/用户组的所有流量流出,并强制 Skype 在该用户/组下执行。以下 AutoIT 脚本提供了可靠执行此操作所需的功能。
#include <Crypt.au3>
; #RequireAdmin ; only for setting the password
Func SetEncrypted($vPassword,$Field)
_Crypt_Startup()
$path="HKLM\Software\MyORG\Skype"
$Key=_Crypt_DeriveKey($vPassword, $CALG_AES_256 )
$FieldValue=InputBox($Field,"")
$output=_Crypt_EncryptData($FieldValue,$Key,$CALG_USERKEY)
RegWrite($path,$Field,"REG_SZ",$output)
_Crypt_DestroyKey($Key)
_Crypt_Shutdown()
EndFunc
Func GetEncrypted($vPassword,$Field)
_Crypt_Startup()
$path="HKLM\Software\MyORG\Skype"
$Key=_Crypt_DeriveKey($vPassword, $CALG_AES_256 )
$input=RegRead($path,$Field)
$decrypted=_Crypt_DecryptData($input,$Key,$CALG_USERKEY)
$decrypted=BinaryToString($decrypted)
_Crypt_DestroyKey($Key)
_Crypt_Shutdown()
Return $decrypted
EndFunc
$EncryptionPassword="super password which will be buried in the exe itself, set this yourself "
;SetEncrypted($EncryptionPassword,"Domain")
;SetEncrypted($EncryptionPassword,"User")
;SetEncrypted($EncryptionPassword,"Password")
$User=GetEncrypted($EncryptionPassword,"User")
$Pass=GetEncrypted($EncryptionPassword,"Password")
$Domain=GetEncrypted($EncryptionPassword,"Domain")
; Find the executable name.
$Skype = RegRead("HKLM\SOFTWARE\Skype\Phone", "SkypePath")
If( $Skype = "" ) Then
; 64 bit support
$Skype= RegRead("HKLM\SOFTWARE\Wow6432Node\Skype\Phone", "SkypePath")
EndIf
MsgBox(0,"",$Skype)
; Run Skype under alternate credentials.
RunAs($User,$Domain,$Pass, 4, $Skype, @SystemDir )
通过将 ID 和密码存储在注册表中,可以很容易地对与备用凭据相关联的帐户进行密码更新 - GPP 注册表项就可以做到这一点。
编辑-对所有出站流量进行身份验证的出站规则必须位于优先级列表的最底部,直接位于默认规则之上。如果不这样做,任何从内到外的未经身份验证的流量(例如发送给外部各方的电子邮件)都将被阻止。