有所改动
This commit is contained in:
@@ -91,6 +91,27 @@ namespace BarrageGrab
|
||||
foreach (var item in list) func(item, i++);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否包含
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
/// <param name="args"></param>
|
||||
/// <returns></returns>
|
||||
public static bool In<T>(this T obj, params T[] args)
|
||||
{
|
||||
return args.Contains(obj);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 是否包含
|
||||
/// </summary>
|
||||
/// <param name="obj"></param>
|
||||
/// <param name="args"></param>
|
||||
/// <returns></returns>
|
||||
public static bool LikeIn(this string str, params string[] args)
|
||||
{
|
||||
return args.Any(a => str.Contains(a));
|
||||
}
|
||||
|
||||
public static CookieCollection ToCookies(this string cookieStr, string domain)
|
||||
{
|
||||
|
||||
@@ -33,6 +33,6 @@ using System.Runtime.InteropServices;
|
||||
//可以指定所有这些值,也可以使用“生成号”和“修订号”的默认值
|
||||
//通过使用 "*",如下所示:
|
||||
// [assembly: AssemblyVersion("1.0.*")]
|
||||
[assembly: AssemblyVersion("2.7.4.0")]
|
||||
[assembly: AssemblyFileVersion("2.7.4.0")]
|
||||
[assembly: AssemblyVersion("2.7.6.0")]
|
||||
[assembly: AssemblyFileVersion("2.7.6.0")]
|
||||
[assembly: NeutralResourcesLanguage("zh-CN")]
|
||||
|
||||
@@ -16,6 +16,8 @@ using Titanium.Web.Proxy.EventArguments;
|
||||
using Titanium.Web.Proxy.Http;
|
||||
using Titanium.Web.Proxy.Models;
|
||||
using Titanium.Web.Proxy.StreamExtended.Network;
|
||||
using System.Security.Cryptography.X509Certificates;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
namespace BarrageGrab.Proxy
|
||||
{
|
||||
@@ -75,9 +77,10 @@ namespace BarrageGrab.Proxy
|
||||
proxyServer.ReuseSocket = false;
|
||||
proxyServer.EnableConnectionPool = true;
|
||||
proxyServer.ForwardToUpstreamGateway = true;
|
||||
proxyServer.CertificateManager.SaveFakeCertificates = true;
|
||||
|
||||
proxyServer.CertificateManager.RootCertificate = proxyServer.CertificateManager.LoadRootCertificate();
|
||||
proxyServer.CertificateManager.CertificateValidDays = 365 * 10;
|
||||
proxyServer.CertificateManager.SaveFakeCertificates = true;
|
||||
proxyServer.CertificateManager.RootCertificate = GetCert();
|
||||
if (proxyServer.CertificateManager.RootCertificate == null)
|
||||
{
|
||||
Logger.PrintColor("正在进行证书安装,需要信任该证书才可进行https解密,若有提示请确定");
|
||||
@@ -97,6 +100,62 @@ namespace BarrageGrab.Proxy
|
||||
proxyServer.AddEndPoint(explicitEndPoint);
|
||||
}
|
||||
|
||||
private X509Certificate2 GetCert()
|
||||
{
|
||||
X509Certificate2 result = proxyServer.CertificateManager.LoadRootCertificate();
|
||||
|
||||
if (result != null) return result;
|
||||
|
||||
// 打开“受信任的根证书颁发机构”存储区
|
||||
using (X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine))
|
||||
{
|
||||
store.Open(OpenFlags.ReadOnly);
|
||||
|
||||
// 遍历证书集合
|
||||
foreach (X509Certificate2 cert in store.Certificates)
|
||||
{
|
||||
try
|
||||
{
|
||||
// 尝试使用证书创建 X509Certificate2 实例
|
||||
X509Certificate2 certificate = new X509Certificate2(cert);
|
||||
|
||||
//判断过期
|
||||
if (DateTime.Now > certificate.NotAfter) continue;
|
||||
|
||||
//判断黑名单
|
||||
var black = new string[] { "localhost" };
|
||||
if (certificate.FriendlyName.ToLower().LikeIn(black) ||
|
||||
certificate.Subject.ToLower().LikeIn(black)
|
||||
) continue;
|
||||
|
||||
|
||||
if (certificate.FriendlyName.ToLower().LikeIn("titanium"))
|
||||
{
|
||||
result = certificate;
|
||||
break;
|
||||
}
|
||||
|
||||
// 打印证书信息
|
||||
//Console.WriteLine("证书: " + certificate.Subject);
|
||||
//Console.WriteLine("颁发者: " + certificate.Issuer);
|
||||
//Console.WriteLine("有效期: " + certificate.NotBefore + " - " + certificate.NotAfter);
|
||||
|
||||
//result = certificate;
|
||||
//break;
|
||||
}
|
||||
catch (CryptographicException ex)
|
||||
{
|
||||
//捕获加密异常,如果证书需要密码,这里会抛出异常
|
||||
throw new Exception("证书加载失败: " + ex.Message);
|
||||
}
|
||||
}
|
||||
|
||||
store.Close();
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public override void SetUpstreamProxy(string upstreamProxyAddr)
|
||||
{
|
||||
if (string.IsNullOrWhiteSpace(upstreamProxyAddr)) return;
|
||||
@@ -585,7 +644,7 @@ namespace BarrageGrab.Proxy
|
||||
/// </summary>
|
||||
override public void Start()
|
||||
{
|
||||
proxyServer.Start(AppSetting.Current.UsedProxy);
|
||||
proxyServer.Start(false);
|
||||
if (AppSetting.Current.UsedProxy)
|
||||
{
|
||||
base.RegisterSystemProxy();
|
||||
|
||||
Reference in New Issue
Block a user