diff --git a/assets/certs/ca.crt b/assets/certs/ca.crt index fb3742f..20165a1 100644 --- a/assets/certs/ca.crt +++ b/assets/certs/ca.crt @@ -1,23 +1,23 @@ -----BEGIN CERTIFICATE----- -MIID1jCCAr6gAwIBAgIJAJHqGActdgp0MA0GCSqGSIb3DQEBCwUAMGIxCzAJBgNV -BAYTAkNOMQswCQYDVQQIDAJCSjEQMA4GA1UEBwwHQmVpSmluZzEOMAwGA1UECgwF -UHJveHkxETAPBgNVBAsMCFByb3h5UGluMREwDwYDVQQDDAhQcm94eVBpbjAeFw0y -MzA2MjIxMTIwMjBaFw0zMzA2MTkxMTIwMjBaMGIxCzAJBgNVBAYTAkNOMQswCQYD -VQQIDAJCSjEQMA4GA1UEBwwHQmVpSmluZzEOMAwGA1UECgwFUHJveHkxETAPBgNV -BAsMCFByb3h5UGluMREwDwYDVQQDDAhQcm94eVBpbjCCASIwDQYJKoZIhvcNAQEB -BQADggEPADCCAQoCggEBAMRjfFvFDZS+PsdedUNq0Kn5t7RFNS0iQrZALr4LJm3U -wtatHtMEWBb9ptam8pWezxrZPZ81+qnTcaq/To82yus5hJa4JRk223YWn5JDd4iz -H4gcnSomhUQ6Ycrc0v+I7UEaHV+bQsleHEfYi2+E1qF+FBhRveLSPmz2QORd/U4+ -gDlOptgNWMQ9OTRHsMoDzb8J4SlcBu+s0dnq2WHOM9boGnfk2wIgE+16uB23epPo -Yjex8zYGUswh8gNrIzXsr7i9IGtGf67FQYCWOXfZLeGgy0Q0/r1lwSmywUkNaZIs -iGZHveZsLtW93MWMFw0uneEvHsuQV+e8sdLI/633TGcCAwEAAaOBjjCBizAdBgNV -HQ4EFgQU4YXwKkBDFoZY3D81RM25ECSc2qcwHwYDVR0jBBgwFoAU4YXwKkBDFoZY -3D81RM25ECSc2qcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAaYwEwYD -VR0RBAwwCoIIUHJveHlQaW4wEwYDVR0lBAwwCgYIKwYBBQUHAwEwDQYJKoZIhvcN -AQELBQADggEBAB51+IWp5uCliQxxRzJS1Pg0A7ZVaWCCVQMkLtpfkK6GIGP/tgzn -xKf2hZw4tyd5Q9bKAzDBDR76GGsUvC666BjQFUmb/Av8+2f5I0Q55ZzAwKMSEPWU -D9gYN1C1E6o6exJQlgumpD9MB8GGHrKZyHy9vopVi26r7kkzXiz4b3tDIkexLePb -04Konox7v8S62+IFHLhdi6MybXbZxvhmGcLQvogRKUEBFCLBc+Ht+ZLtHPlfZuUf -v9yCKrPWW+8vRTItQjaewEaBbpZyKmp8pCWKqCtJHe0/lbGysX4FJDIwC6hHGM19 -S2TuBqtJYrUesVj/HDOOJTAJ46SKMTqQRow= +MIID4jCCAsqgAwIBAgIJAKcH8Dna4mnZMA0GCSqGSIb3DQEBCwUAMGgxCzAJBgNV +BAYTAkNOMQswCQYDVQQIDAJCSjEQMA4GA1UEBwwHQmVpSmluZzERMA8GA1UECgwI +UHJveHlQaW4xETAPBgNVBAsMCFByb3h5UGluMRQwEgYDVQQDDAtQcm94eVBpbiBD +QTAeFw0yMzA2MjQxNjA2MDlaFw0zMzA2MjExNjA2MTBaMGgxCzAJBgNVBAYTAkNO +MQswCQYDVQQIDAJCSjEQMA4GA1UEBwwHQmVpSmluZzERMA8GA1UECgwIUHJveHlQ +aW4xETAPBgNVBAsMCFByb3h5UGluMRQwEgYDVQQDDAtQcm94eVBpbiBDQTCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMRjfFvFDZS+PsdedUNq0Kn5t7RF +NS0iQrZALr4LJm3UwtatHtMEWBb9ptam8pWezxrZPZ81+qnTcaq/To82yus5hJa4 +JRk223YWn5JDd4izH4gcnSomhUQ6Ycrc0v+I7UEaHV+bQsleHEfYi2+E1qF+FBhR +veLSPmz2QORd/U4+gDlOptgNWMQ9OTRHsMoDzb8J4SlcBu+s0dnq2WHOM9boGnfk +2wIgE+16uB23epPoYjex8zYGUswh8gNrIzXsr7i9IGtGf67FQYCWOXfZLeGgy0Q0 +/r1lwSmywUkNaZIsiGZHveZsLtW93MWMFw0uneEvHsuQV+e8sdLI/633TGcCAwEA +AaOBjjCBizAdBgNVHQ4EFgQU4YXwKkBDFoZY3D81RM25ECSc2qcwHwYDVR0jBBgw +FoAU4YXwKkBDFoZY3D81RM25ECSc2qcwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8B +Af8EBAMCAaYwEwYDVR0RBAwwCoIIUHJveHlQaW4wEwYDVR0lBAwwCgYIKwYBBQUH +AwEwDQYJKoZIhvcNAQELBQADggEBAAc2s5TwuOdPdl3gYs121sY+HEMyXfsnVTGV +dIlgjf+a0ECir2bcs64udaCIgBjd/vqhShMeqeQ4GJW7Ypb9556L213xjbLj/ZVU +rgZda6oVd4der8YEHXKLxWAGlZQeeKHhw1lN4PYwxxGaf7/wsM7Dil0JLyOBtJaJ +zNRzVzK9UHASDx0qDQVUBbeYzRviVCjxAGBNM/eNlPDX7m//vgCLxQgcxVdoJvMQ +kSVQddo+d8fxnPAVx77dyX0T/ek7PQOsL6d08TVCdvgv50LwE8f9EMhHVv7zjEv2 +0ZSaRQ0pvUnc0ClKXIGeMD71eYeeTz7CGjndxy5bdV/wmoo3Yek= -----END CERTIFICATE----- diff --git a/lib/main.dart b/lib/main.dart index 087aa32..35a8c44 100644 --- a/lib/main.dart +++ b/lib/main.dart @@ -15,8 +15,10 @@ void main() async { WidgetsFlutterBinding.ensureInitialized(); //设置窗口大小 await windowManager.ensureInitialized(); + WindowOptions windowOptions = WindowOptions( - minimumSize: const Size(960, 680), + minimumSize: const Size(980, 600), + size: Platform.isMacOS ? const Size(1200, 750) : const Size(1080, 650), center: true, titleBarStyle: Platform.isMacOS ? TitleBarStyle.hidden : TitleBarStyle.normal); windowManager.waitUntilReadyToShow(windowOptions, () async { diff --git a/lib/network/handler.dart b/lib/network/handler.dart index 7481ba4..6378d4f 100644 --- a/lib/network/handler.dart +++ b/lib/network/handler.dart @@ -1,10 +1,10 @@ import 'dart:convert'; import 'dart:io'; -import 'package:flutter/services.dart'; import 'package:network_proxy/network/http/http.dart'; import 'package:network_proxy/network/http/http_headers.dart'; import 'package:network_proxy/network/util/attribute_keys.dart'; +import 'package:network_proxy/network/util/file_read.dart'; import 'package:network_proxy/network/util/request_rewrite.dart'; import 'channel.dart'; @@ -84,7 +84,7 @@ class HttpChannelHandler extends ChannelHandler { response.headers.set("Content-Disposition", 'inline;filename=ProxyPinCA.crt'); response.headers.set("Connection", 'close'); - var body = await rootBundle.load('assets/certs/ca.crt'); + var body = await FileRead.read('assets/certs/ca.crt'); response.headers.set("Content-Length", body.lengthInBytes.toString()); if (request.method == HttpMethod.head) { diff --git a/lib/network/util/crts.dart b/lib/network/util/crts.dart index b6b001f..c2a2563 100644 --- a/lib/network/util/crts.dart +++ b/lib/network/util/crts.dart @@ -5,6 +5,8 @@ import 'dart:math'; import 'package:basic_utils/basic_utils.dart'; import 'package:network_proxy/network/util/x509.dart'; +import 'file_read.dart'; + Future main() async { await CertificateManager.getCertificateContext('www.jianshu.com'); CertificateManager.caCert.tbsCertificateSeqAsString; @@ -78,14 +80,12 @@ class CertificateManager { return; } //从项目目录加入ca根证书 - // var caPem = await rootBundle.loadString('assets/certs/ca.crt'); - var caPem = await File('assets/certs/ca.crt').readAsString(); + var caPem = await FileRead.readAsString('assets/certs/ca.crt'); _caCert = X509Utils.x509CertificateFromPem(caPem); //根据CA证书subject来动态生成目标服务器证书的issuer和subject //从项目目录加入ca私钥 - // var privateBytes = await rootBundle.load('assets/certs/ca_private.der'); - var privateBytes = await File('assets/certs/ca_private.der').readAsBytes(); + var privateBytes = await FileRead.read('assets/certs/ca_private.der'); _caPriKey = CryptoUtils.rsaPrivateKeyFromDERBytes(privateBytes.buffer.asUint8List()); _initialized = true; diff --git a/lib/network/util/file_read.dart b/lib/network/util/file_read.dart new file mode 100644 index 0000000..f1bd076 --- /dev/null +++ b/lib/network/util/file_read.dart @@ -0,0 +1,13 @@ +import 'package:flutter/services.dart'; + +class FileRead { + static Future readAsString(String file) async { + return rootBundle.loadString(file); + // return File(file).readAsString(); + } + + static Future read(String file) async { + return rootBundle.load(file).then((bateData) => bateData.buffer.asUint8List()); + // return File(file).readAsBytes(); + } +} diff --git a/lib/network/util/system_proxy.dart b/lib/network/util/system_proxy.dart index 7afaad7..70b65b5 100644 --- a/lib/network/util/system_proxy.dart +++ b/lib/network/util/system_proxy.dart @@ -6,8 +6,7 @@ class SystemProxy { if (Platform.isMacOS) { _setProxyServerMacOS("127.0.0.1:$port", enableSsl); } else if (Platform.isWindows) { - _setProxyServerWindows("127.0.0.1:$port"); - setProxyEnableWindows(true); + _setProxyServerWindows("127.0.0.1:$port").then((value) => setProxyEnableWindows(true)); } } diff --git a/lib/network/util/x509.dart b/lib/network/util/x509.dart index f014ca0..28ae47f 100644 --- a/lib/network/util/x509.dart +++ b/lib/network/util/x509.dart @@ -63,7 +63,7 @@ class X509Generate { // Add Validity var validitySeq = ASN1Sequence(); - validitySeq.add(ASN1UtcTime(DateTime.now().toUtc())); + validitySeq.add(ASN1UtcTime(DateTime.now().subtract(const Duration(days: 3)).toUtc())); validitySeq.add(ASN1UtcTime(DateTime.now().add(Duration(days: days)).toUtc())); data.add(validitySeq); diff --git a/lib/ui/toolbar/launch/launch.dart b/lib/ui/toolbar/launch/launch.dart index 2122ca7..bdf211a 100644 --- a/lib/ui/toolbar/launch/launch.dart +++ b/lib/ui/toolbar/launch/launch.dart @@ -30,13 +30,6 @@ class _SocketLaunchState extends State with WindowListener { super.dispose(); } - @override - void onWindowMinimize() { - started = false; - widget.proxyServer.stop(); - setState(() {}); - } - @override void onWindowClose() { started = false; diff --git a/windows/runner/main.cpp b/windows/runner/main.cpp index c616f62..1999079 100644 --- a/windows/runner/main.cpp +++ b/windows/runner/main.cpp @@ -26,7 +26,7 @@ int APIENTRY wWinMain(_In_ HINSTANCE instance, _In_opt_ HINSTANCE prev, FlutterWindow window(project); Win32Window::Point origin(10, 10); - Win32Window::Size size(960, 800); + Win32Window::Size size(980, 680); if (!window.Create(L"ProxyPin", origin, size)) { return EXIT_FAILURE; }