Skip to content
Platforms 11-minute read

macOS Proxy Client Permissions: Network Extension Approval & Keychain Prompts

Fix macOS app launch blocks, approve system extensions and TUN network access, and stop recurring Keychain prompts. Covers Apple silicon and Intel Macs.

Start by identifying the prompt: app launch, background service, VPN, or Keychain

A macOS proxy client usually consists of a graphical interface and a proxy core. Mihomo is the core, formerly known as Clash Meta; the client handles configuration imports, system proxy controls, and permission prompts. The same core does not mean every client uses the same Network Extension or helper service. When troubleshooting, note the client name and version, macOS version, and exact prompt text.

“Apple cannot check it for malicious software” is an app launch check; “Add VPN Configurations” requests network configuration approval; a request to install a helper usually involves a privileged background service; and “wants to access confidential information stored in your keychain” concerns saved credentials. These prompts require different actions. Repeatedly entering your password will not tell you whether installation succeeded.

Prompt or symptomWhat it relates toCheck first
“Apple cannot check it for malicious software”Gatekeeper launch checkDownload source, app signature, Privacy & Security
Helper tool installation requires administrator approvalPrivileged helper serviceClient documentation, helper service installation status
Request to add a VPN configurationSystem network configurationRequesting app name, VPN settings
System Extension BlockedExtension load approvalDeveloper name, corresponding extension control
Repeated requests to access the login keychainCredential access or a locked keychainRequesting process, target item, changes to login password

Check your Mac’s architecture and app location before installing

Choosing an installer for Apple silicon or Intel

Open the Apple menu → About This Mac. If it shows an Apple M-series chip, choose an Apple silicon or arm64 build. If it shows an Intel processor, choose an x64 or x86_64 build. A Universal app usually includes both architectures, but check the client’s stated minimum macOS version too.

  • Apple silicon: Rosetta 2 can run many Intel user-space apps, but that does not guarantee compatibility for their helper tools or network extensions. Choose the client’s native build whenever possible.
  • Intel: Intel Macs cannot run executables built only for arm64. If you see a “bad CPU type” error, check the architecture first instead of changing security settings.
  • For any Mac: Drag the app into Applications, eject the disk image, then launch it from Applications. Don’t keep running a copy directly from the DMG.

Installing the app in a consistent location helps avoid confusion between duplicate copies. If an old icon remains in the Dock, right-click it → Options → Show in Finder to confirm it points to the current version. Quit the old process before replacing the app; otherwise, the interface may be updated while an older core is still running in the background.

# Check the architecture used by the current Terminal process; a Terminal running under Rosetta may show x86_64
uname -m

# Check the macOS version
sw_vers -productVersion

Use About This Mac to identify your hardware. If Terminal is running under Rosetta, uname -m alone can lead you to choose the wrong installer.

Resolve “Apple cannot check it for malicious software” without disabling security checks

On macOS 13 Ventura, 14 Sonoma, and 15 Sequoia, go to System Settings → Privacy & Security. After you try to open a blocked app, the page may show a record of the block and an Open Anyway option near the bottom. Verify the app’s name and source before confirming, and note that this option is not available for every type of block.

  1. Confirm the installer came from the project’s official release channel and matches your macOS version and CPU architecture.
  2. Move the app to Applications, try launching it once, and note the full error message.
  3. Open Privacy & Security and check for an option to allow the app.
  4. If macOS says the app will damage your computer, contains malware, or is blocked by an organization’s policy, do not override the warning. Verify the source or contact your administrator.

“The app is damaged” does not always mean macOS quarantine is the cause. An interrupted download, invalid signature, or modified file can also prevent an app from launching. The safer next step is to download a compatible version from the same project again, rather than immediately running a command to recursively remove quarantine attributes.

Approve Network Extensions or helper services based on the client’s implementation

If you see “Add VPN Configurations”

A client that uses Network Extension may ask to add a VPN configuration the first time it starts a network tunnel. Check that the app named in the prompt matches the client you’re using and the action you just took, then decide whether to allow it. After approval, search for VPN in System Settings to view the configuration. A VPN status only reflects the tunnel’s state; it does not confirm that your nodes, DNS, or rules are working correctly.

If you see “System Extension Blocked”

On macOS 13 and 14, check System Settings → Privacy & Security for an option to allow the developer. In macOS 15, some extension controls are under System Settings → General → Login Items & Extensions → Network Extensions. The exact location depends on the extension type and macOS point release; you can also search for “extensions” in System Settings. Enable only the item associated with the client’s developer.

If you’re asked to install a helper tool

Some clients use a helper service to gain the privileges needed to set routes and launch the core with elevated permissions. This prompt usually requires approval from an administrator account on the Mac—not your subscription login or Apple Account password. After installation, the service status in the client should change accordingly. If it still says the service is not installed, check the service logs rather than clicking Install repeatedly.

  • Restart only when macOS explicitly asks you to. Not every approval requires a restart.
  • On a managed Mac, your organization may restrict extensions, VPN configurations, or background items. Clicking Allow as a standard user cannot override device management policies.
  • Don’t grant Full Disk Access, Accessibility, or Screen Recording just because TUN won’t start. None of these permissions is a general requirement for Mihomo to establish a proxy connection.

If an upgrade leaves the helper service out of sync with the main app, use the client’s Repair Service option or reinstall its service feature. Don’t delete unfamiliar items from /Library/LaunchDaemons yourself; you could break background services used by other software.

Test the system proxy first, then enable TUN separately

For a first-time setup, verify the client in two stages: import a valid configuration and enable only the system proxy. Once your browser works, enable TUN if needed. This helps separate node or subscription issues from routing permission problems. The system proxy affects apps that follow macOS proxy settings; TUN routes eligible traffic through a virtual network interface. They are separate controls.

Check the proxy port and macOS network settings

For example, with the mixed port shown below, both HTTP and SOCKS proxies can connect to 7890 on your Mac. This is only an example; use the active configuration when troubleshooting. Some clients override configured ports, so check both the client interface and core logs.

mixed-port: 7890
allow-lan: false
mode: rule

On macOS 13–15, go to System Settings → Network → your current connection → Details → Proxies. Check the server and port for web proxy (HTTP) and secure web proxy (HTTPS). For the example above, the address should be 127.0.0.1 and the port 7890. Don’t enter a node server address in the local HTTP proxy field.

# Check the system proxy status
scutil --proxy

# Check whether the example port is listening for TCP connections
lsof -nP -iTCP:7890 -sTCP:LISTEN

# Send a request explicitly through the local HTTP proxy
curl -I --connect-timeout 10 --proxy http://127.0.0.1:7890 https://example.com

These commands help narrow down the issue; they don’t guarantee a particular test result. A listening port only means that a process has bound to it, so check the process name too. If a request fails, use the logs to distinguish a proxy connection issue from a node handshake failure or a response from the destination site.

What to check after enabling TUN

  1. Stop any other VPN or proxy clients first to prevent conflicts over the default route and DNS.
  2. Enable TUN in the client and approve the service or extension it actually requests.
  3. Check the logs for permission errors, failed route setup, or device creation failures.
  4. Test websites and apps that require TUN separately, then check rule matching and DNS behavior.

Seeing a utun interface in ifconfig does not prove that Mihomo is working properly; system services and other VPNs can create these interfaces too. Check the client logs, connection records, and routes together. Don’t use networksetup -setv6off as a routine fix: permission errors are not necessarily related to the IPv6 setting.

Repeated Keychain prompts: identify the requested item before granting access

A client may store subscription credentials, tokens, or other sensitive configuration in Keychain. The prompt usually names the requesting process and the target item. Confirm that it belongs to the client you’re using; if the process is unfamiliar or the item is unrelated to your proxy, deny access and investigate. Administrator approval for TUN does not give the app access to every Keychain item.

“Allow Once” vs. “Always Allow”

Allow Once usually approves only the current request, so you may see another prompt next time. Always Allow saves permission for the specified item. Grant ongoing access only after confirming the app’s identity and why it needs the item. If you switch app copies, the signing identity changes, or you move to a build from another source, the existing permission may no longer match. A prompt after an update is not necessarily a fault.

Check that the login keychain is unlocked

  1. Search for Keychain Access with Spotlight and open it, then select the login keychain.
  2. Check whether the keychain is locked. If it is, try unlocking it with the password associated with that keychain.
  3. Search for the item named in the prompt, open its details, and review options such as Access Control.
  4. Make sure the app allowed to access the item still points to the client currently installed. Don’t change the setting to allow all apps.

If you reset your Mac login password using a recovery process or another administrator account, your login keychain may still use the old password. Your new login password may not unlock it. If you know the old password, use the system’s process to update the keychain password. If you don’t, read the system guidance about resetting the default keychain and consider the impact of losing locally stored credentials.

If the exact same access request appears every time the client starts, check whether multiple copies are running, whether the app is being launched from different paths, and whether the system clock is correct. Then review the client’s release notes and logs. Re-entering your password won’t fix a mismatch between item permissions and the app’s signing identity.

Safe steps for upgrading, uninstalling, and restoring network settings

Before replacing the client, export or back up its configuration and note the current port, rule mode, and whether TUN is enabled. Turn off TUN, disable the system proxy, and quit the client—in that order—before replacing the app. If you need to remove a helper service or Network Extension, use the client’s uninstaller first; moving the app to Trash may leave system components behind.

  • Web pages won’t load after quitting: Go to Network → your current connection → Details → Proxies and check for settings that still point to a port that is no longer active.
  • DNS still fails after switching to a direct connection: Check for manual DNS settings, another VPN, or a network filter. Note the original values before restoring them, and avoid changing several things at once.
  • The service stopped working after an update: Check the app architecture and helper service status. Repair the service according to the client documentation, then test the system proxy again.
  • You still can’t approve the extension: Check whether the Mac is managed, then record the macOS version, developer name, and exact error text. Ask your administrator or the project maintainer to review the details.

When reporting an issue, include the client and macOS versions, Mac chip type, whether you’re using the system proxy or TUN, and when the error occurred. Redact subscription URLs, tokens, node credentials, and personal domains from logs. Troubleshoot in this order: can the app launch, is the local port listening, is the system proxy working, is the TUN interface established, and can the client access Keychain? This is usually more effective than reinstalling, changing DNS, and clearing Keychain all at once.

For specific settings, see the configuration guide, from beginner basics to advanced options. For installation help, follow the client setup guide. If you still can’t connect after resolving permissions, check node availability, DNS, and rules instead of granting more system access.

Download Clash