From 803853b125c0c3a5af071112ae4bafee1953f0fa Mon Sep 17 00:00:00 2001 From: cproudlock Date: Mon, 19 Jan 2026 16:33:39 -0500 Subject: [PATCH] Add MachineAuth 802.1x network configuration installer New Inno Setup project that configures shop floor PCs for Machine VLAN connectivity via 802.1x/ISE authentication. Features: - Native Pascal implementation (no external batch files required) - Silent installation support for deployment automation - Windows 7/8/10/11 auto-detection - Automatic network interface detection (wired/wireless) - Detailed logging and results display Configures: - Wired: 802.1x PEAP/MS-CHAPv2 via Corporate Holdings RADIUS - Wireless: AESFMA SSID with EAP-TLS via Aerospace FreeRADIUS Usage: MachineAuthSetup.exe /VERYSILENT /SUPPRESSMSGBOXES Co-Authored-By: Claude Opus 4.5 --- MachineAuth/$PLUGINSDIR/System.dll | Bin 0 -> 12288 bytes MachineAuth/$PLUGINSDIR/nsExec.dll | Bin 0 -> 7168 bytes MachineAuth/8021x.xml | 14 + MachineAuth/AESFMA.xml | 27 ++ MachineAuth/MA3NetworkConfigv4.bat | 125 +++++++ MachineAuth/MachineAuth.iss | 503 +++++++++++++++++++++++++++++ MachineAuth/README.md | 171 ++++++++++ MachineAuth/READMENetwork.txt | 33 ++ MachineAuth/banner-sm.bmp | Bin 0 -> 9798 bytes MachineAuth/banner.bmp | Bin 0 -> 154542 bytes MachineAuth/gea-logo.ico | Bin 0 -> 9662 bytes README.md | 7 +- 12 files changed, 879 insertions(+), 1 deletion(-) create mode 100644 MachineAuth/$PLUGINSDIR/System.dll create mode 100644 MachineAuth/$PLUGINSDIR/nsExec.dll create mode 100644 MachineAuth/8021x.xml create mode 100644 MachineAuth/AESFMA.xml create mode 100644 MachineAuth/MA3NetworkConfigv4.bat create mode 100644 MachineAuth/MachineAuth.iss create mode 100644 MachineAuth/README.md create mode 100644 MachineAuth/READMENetwork.txt create mode 100644 MachineAuth/banner-sm.bmp create mode 100644 MachineAuth/banner.bmp create mode 100644 MachineAuth/gea-logo.ico diff --git a/MachineAuth/$PLUGINSDIR/System.dll b/MachineAuth/$PLUGINSDIR/System.dll new file mode 100644 index 0000000000000000000000000000000000000000..57c84d57258b83d4014e896a238c477cb45db3fb GIT binary patch literal 12288 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 T!TKla{~MO_w;}%@YT*9@=T#On literal 0 HcmV?d00001 diff --git a/MachineAuth/$PLUGINSDIR/nsExec.dll b/MachineAuth/$PLUGINSDIR/nsExec.dll new file mode 100644 index 0000000000000000000000000000000000000000..1daa13cb9d5f6dc24b1ef99b32262db26293db97 GIT binary patch literal 7168 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 literal 0 HcmV?d00001 diff --git a/MachineAuth/8021x.xml b/MachineAuth/8021x.xml new file mode 100644 index 0000000..9e8373c --- /dev/null +++ b/MachineAuth/8021x.xml @@ -0,0 +1,14 @@ + + + + + false + true + + true + machine + 2500025false71 bf 35 6d d6 a5 08 45 22 f7 0d 68 5a 8b e0 71 be ba da a4 18 ad d0 34 a2 ef 3e 6d c8 8b a2 3f 65 b9 0b d5 0f fe 08 b0 fd 92 c4 c7 cd 49 d2 8d dd 08 55 1c e2 f0 8b 33 c8 db c4 55 2b 8f 1b 57 33 0d bb a2 d0 7a 6c 51 f7 0e e9 0d da b9 ad 8e truefalse26truefalsefalsetruefalse + + + + diff --git a/MachineAuth/AESFMA.xml b/MachineAuth/AESFMA.xml new file mode 100644 index 0000000..b991be3 --- /dev/null +++ b/MachineAuth/AESFMA.xml @@ -0,0 +1,27 @@ + + + AESFMA + + + 414553464D41 + AESFMA + + false + + ESS + auto + false + + + + WPA2 + AES + true + + + machine + 1300013truefalse27 f0 c9 a2 2b 28 ce 76 87 b1 15 a2 9e 31 bf 4b 3a bb 18 0f falsetruefalse + + + + diff --git a/MachineAuth/MA3NetworkConfigv4.bat b/MachineAuth/MA3NetworkConfigv4.bat new file mode 100644 index 0000000..525c967 --- /dev/null +++ b/MachineAuth/MA3NetworkConfigv4.bat @@ -0,0 +1,125 @@ +@ECHO OFF +setlocal EnableDelayedExpansion +REM Machine Authentication Network Configuration Batch file to configure shop floor PC for connection to machine VLAN via 802.1x. +REM Connectivity is via standard tech - 802.1x, ACS, and AD group membership (for wired connections) or Device Issued Certificates (for AESFMA) +REM This file needs to be executed with admin privilege from C:\Windows\Options\Packages\GEAerospace_MA_3x4_V01\ +REM These files must exist in C:\Windows\Options\Packages\GEAerospace_MA_3x4_V01\ +REM - MA3NetworkConfigv4.bat (this file) +REM - 8021x.xml +REM - AESFMA.xml +REM No reboot is required. +REM Script can be run multiple times with no detrimental impact to the machine. +REM This will not remove the connection to GESFMA. It will not change the wired network from the MA 2.0 settings. +REM Machine will experience temporary loss of network as the service is cycled. +REM Works for both wired and wireless machines. +REM Script usually runs to completion in under 30 seconds. +REM Upon completion, machine will have 'native' vault access. Test to confirm. +REM ASSUMPTION THAT WIRED OR WIRELESS INTERFACE FOLLOW STANDARD CONVENTION - Local Area Connection, Local Area Connection 2, Wireless Network Connection, Wireless Network Connection 2 etc + +ECHO: +ECHO Configuring machine for Machine Authentication 3.0 VLAN connectivity +ECHO: + +REM SEED DEFAULT INTERFACES +REM THE * FOR WIRELESS TREATS THE MACHINE AS WIRED. AESFMA PROFILE IS ADDED TO ALL WIRELESS INTERFACES. THIS ENSURES WIRELESS WORKS SHOULD THE MACHINE MIGRATE FROM WIRED > WIRELESS +SET sf_LNWLC= +SET sf_NW= +SET sf_WNWLC= +SET sf_WinVer= +SET sf_ExecPath=C:\Windows\Options\Packages\GEAerospace_MA_3x4_V01 + +REM GET WINDOWS VERSION - 7 OR 10. IF NOT WIN10, ASSUME WIN7 +FOR /f "tokens=4-5 delims=[.] " %%i in ('ver') DO ( + SET sf_WinVer=%%i.%%j +) +IF %sf_WinVer%==10.0 ( + goto CONFIGWIN10 +) +IF %sf_WinVer%==6.1 ( + goto CONFIGWIN7 +) + +:CONFIGWIN7 +REM WIRED OR WIRELESS? +REM CHECK IF CURRENTLY CONNECTED TO WIRED OR WIRELESS +REM FIND CONNECTED LAN INTERFACE THAT STARTS WITH "Local ..." AND WLAN STARTING WITH "Wireless ..." WHICH IS STANDARD CONVENTION +SET sf_LNWLC=Local Area Connection +SET sf_WNWLC=Wireless Network Connection +FOR /f "skip=2 tokens=5*" %%a IN ('netsh interface ipv4 show Interfaces ^| find /V /i "disconnected"') Do ( + IF %%a==Local ( + SET sf_NW=LAN + goto INTERFACEFOUND + ) + IF %%a==Wireless ( + SET sf_NW=WLAN + goto INTERFACEFOUND + ) +) + +:CONFIGWIN10 +SET sf_LNWLC=Ethernet +SET sf_WNWLC=Wi-Fi +FOR /f "skip=2 tokens=5*" %%a IN ('netsh interface ipv4 show Interfaces ^| find /V /i "disconnected"') Do ( + IF %%a==Ethernet ( + SET sf_NW=LAN + goto INTERFACEFOUND + ) + IF %%a==Wi-Fi ( + SET sf_NW=WLAN + goto INTERFACEFOUND + ) +) + +:INTERFACEFOUND +ECHO: +ECHO Windows Version = %sf_WinVer% +ECHO LAN Interface = %sf_LNWLC% +ECHO WLAN Interface = %sf_WNWLC% +ECHO Configuring Active Interface = %sf_NW% +ECHO: + +REM MAY NOT EXIST BUT SUPPRESS IT TO ALLOW BOTH WIRED AND WIRELESS CONFIG +NET STOP "NetworkAdapterManager" + +ECHO: +ECHO Configuring wired interface for 802.1x. HELPMSG 2182 can be ignored. +ECHO: +REM CONFIG WIRED FOR 802.1x +sc config dot3svc start= auto +NET START "Wired AutoConfig" /n +ECHO: +ECHO Importing to wired interface "%sf_LNWLC%" +ECHO: +netsh lan add profile filename="%sf_ExecPath%\8021x.xml" interface="%sf_LNWLC%" + +ECHO: +ECHO Configuring wireless interface for 802.1x. HELPMSG 2182 can be ignored. +ECHO: +REM ADD AESFMA WIRELESS SSID +sc config Wlansvc start= auto +NET START "WLAN AutoConfig" /n +ECHO: +ECHO Importing to wireless interface "%sf_WNWLC%" +ECHO: +netsh wlan add profile filename="%sf_ExecPath%\AESFMA.xml" interface="%sf_WNWLC%" + +REM REFRESH NETWORK. IF MACHINE WAS ID AS WIRED, STOP WIRELESS AND CYCLE LAN. +if %sf_NW%==LAN ( +REM NET STOP "WLAN AutoConfig" /n + netsh lan reconnect interface="%sf_LNWLC%" +) + +REM REFRESH NETWORK. IF MACHINE WAS ID AS WIRELESS, STOP WIRED AND CYCLE WLAN. +if %sf_NW%==WLAN ( +REM NET STOP "Wired AutoConfig" /n + netsh wlan connect name=AESFMA ssid=AESFMA interface="%sf_WNWLC%" +) + +NET START "NetworkAdapterManager" + +ECHO: +ECHO Cycling Network Connections ... +ECHO: +REM GIVE NETWORK TIME TO REFRESH +timeout /T 10 /NOBREAK +EXIT diff --git a/MachineAuth/MachineAuth.iss b/MachineAuth/MachineAuth.iss new file mode 100644 index 0000000..4f95e31 --- /dev/null +++ b/MachineAuth/MachineAuth.iss @@ -0,0 +1,503 @@ +; ============================================================================ +; Machine Authentication 3.0 Network Configuration +; Configures shop floor PCs for 802.1x/ISE Machine VLAN connectivity +; ============================================================================ +; +; This installer configures: +; - Wired network: 802.1x using Corporate Holdings RADIUS servers +; - Wireless network: AESFMA SSID using Aerospace FreeRADIUS servers +; +; Silent Installation: +; MachineAuthSetup.exe /VERYSILENT /SUPPRESSMSGBOXES /LOG="C:\ma3.log" +; +; ============================================================================ + +[Setup] +AppId={{8A3B4C5D-6E7F-8901-2345-6789ABCDEF01}} +AppName=Machine Authentication 3.0 +AppVersion=4.0 +AppPublisher=GE Aerospace +DefaultDirName={tmp}\MachineAuth +CreateAppDir=no +PrivilegesRequired=admin +OutputDir=Output +OutputBaseFilename=MachineAuthSetup +SolidCompression=yes +Compression=lzma2 +WizardStyle=modern +SetupIconFile=gea-logo.ico +WizardImageFile=banner.bmp +WizardSmallImageFile=banner-sm.bmp +DisableWelcomePage=no +DisableDirPage=yes +DisableProgramGroupPage=yes +DisableReadyPage=no +DisableFinishedPage=no +Uninstallable=no + +[Languages] +Name: "english"; MessagesFile: "compiler:Default.isl" + +[Messages] +WelcomeLabel2=This will configure your PC for Machine Authentication 3.0 VLAN connectivity.%n%nThis configures 802.1x authentication for both wired and wireless network interfaces.%n%nYour network connection will be briefly interrupted during configuration.%n%nClick Next to continue. + +[Files] +; Include the XML profile files - extract to temp +Source: "8021x.xml"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall +Source: "AESFMA.xml"; DestDir: "{tmp}"; Flags: ignoreversion deleteafterinstall + +[Code] +const + // Network interface names by Windows version + WIN7_WIRED = 'Local Area Connection'; + WIN7_WIRELESS = 'Wireless Network Connection'; + WIN10_WIRED = 'Ethernet'; + WIN10_WIRELESS = 'Wi-Fi'; + + // Network types + NET_WIRED = 1; + NET_WIRELESS = 2; + NET_UNKNOWN = 0; + +var + ProgressPage: TOutputProgressWizardPage; + ResultsMemo: TNewMemo; + LogMessages: String; + +// ============================================================================ +// LOGGING FUNCTIONS +// ============================================================================ + +procedure LogMsg(const Msg: String); +begin + LogMessages := LogMessages + Msg + #13#10; + Log(Msg); +end; + +// ============================================================================ +// UTILITY FUNCTIONS +// ============================================================================ + +function IsWindows10OrLater: Boolean; +var + Version: TWindowsVersion; +begin + GetWindowsVersionEx(Version); + Result := (Version.Major >= 10); +end; + +function GetWiredInterfaceName: String; +begin + if IsWindows10OrLater then + Result := WIN10_WIRED + else + Result := WIN7_WIRED; +end; + +function GetWirelessInterfaceName: String; +begin + if IsWindows10OrLater then + Result := WIN10_WIRELESS + else + Result := WIN7_WIRELESS; +end; + +// Execute a command and return the exit code +function ExecCmd(const Executable, Params: String): Integer; +var + ResultCode: Integer; +begin + LogMsg('Executing: ' + Executable + ' ' + Params); + if Exec(Executable, Params, '', SW_HIDE, ewWaitUntilTerminated, ResultCode) then + Result := ResultCode + else + Result := -1; + LogMsg(' Result: ' + IntToStr(Result)); +end; + +// Execute a command via cmd.exe +function ExecShell(const Command: String): Integer; +begin + Result := ExecCmd('cmd.exe', '/c ' + Command); +end; + +// Execute netsh command +function ExecNetsh(const Params: String): Integer; +begin + Result := ExecCmd('netsh.exe', Params); +end; + +// Execute sc command for service control +function ExecSC(const Params: String): Integer; +begin + Result := ExecCmd('sc.exe', Params); +end; + +// Execute net command +function ExecNet(const Params: String): Integer; +begin + Result := ExecCmd('net.exe', Params); +end; + +// Check if a network interface exists and is connected +function IsInterfaceConnected(const InterfaceName: String; IsWireless: Boolean): Boolean; +var + TempFile: String; + OutputLines: TArrayOfString; + I: Integer; + Line: String; + ResultCode: Integer; +begin + Result := False; + TempFile := ExpandConstant('{tmp}\netcheck_') + IntToStr(Random(99999)) + '.txt'; + + if IsWireless then + Exec('cmd.exe', '/c netsh wlan show interfaces > "' + TempFile + '" 2>&1', '', SW_HIDE, ewWaitUntilTerminated, ResultCode) + else + Exec('cmd.exe', '/c netsh lan show interfaces > "' + TempFile + '" 2>&1', '', SW_HIDE, ewWaitUntilTerminated, ResultCode); + + if FileExists(TempFile) then + begin + if LoadStringsFromFile(TempFile, OutputLines) then + begin + for I := 0 to GetArrayLength(OutputLines) - 1 do + begin + Line := OutputLines[I]; + // Check for interface name and connected state + if (Pos(InterfaceName, Line) > 0) then + begin + Result := True; + Break; + end; + // Also check for "State" line showing "connected" + if (Pos('connected', LowerCase(Line)) > 0) and (Pos('disconnected', LowerCase(Line)) = 0) then + begin + Result := True; + end; + end; + end; + DeleteFile(TempFile); + end; +end; + +// Detect which network type is currently active +function DetectActiveNetwork: Integer; +var + WiredInterface, WirelessInterface: String; +begin + Result := NET_UNKNOWN; + + WiredInterface := GetWiredInterfaceName; + WirelessInterface := GetWirelessInterfaceName; + + LogMsg('Detecting active network interface...'); + LogMsg(' Wired interface name: ' + WiredInterface); + LogMsg(' Wireless interface name: ' + WirelessInterface); + + // Check wired first (preferred) + if IsInterfaceConnected(WiredInterface, False) then + begin + LogMsg(' Active network: WIRED'); + Result := NET_WIRED; + end + else if IsInterfaceConnected(WirelessInterface, True) then + begin + LogMsg(' Active network: WIRELESS'); + Result := NET_WIRELESS; + end + else + begin + // Default to wired if can't detect + LogMsg(' Could not detect active network, defaulting to WIRED'); + Result := NET_WIRED; + end; +end; + +// ============================================================================ +// SERVICE MANAGEMENT +// ============================================================================ + +procedure StopService(const ServiceName: String); +begin + LogMsg('Stopping service: ' + ServiceName); + ExecNet('stop "' + ServiceName + '"'); +end; + +procedure StartService(const ServiceName: String); +begin + LogMsg('Starting service: ' + ServiceName); + ExecNet('start "' + ServiceName + '"'); +end; + +procedure SetServiceAutoStart(const ServiceName: String); +begin + LogMsg('Setting service to auto-start: ' + ServiceName); + ExecSC('config ' + ServiceName + ' start= auto'); +end; + +// ============================================================================ +// NETWORK CONFIGURATION +// ============================================================================ + +function ConfigureWiredNetwork: Boolean; +var + InterfaceName, ProfilePath: String; +begin + Result := True; + InterfaceName := GetWiredInterfaceName; + ProfilePath := ExpandConstant('{tmp}\8021x.xml'); + + LogMsg(''); + LogMsg('=== Configuring Wired Network ==='); + LogMsg('Interface: ' + InterfaceName); + LogMsg('Profile: ' + ProfilePath); + + // Enable and start Wired AutoConfig service + SetServiceAutoStart('dot3svc'); + StartService('Wired AutoConfig'); + + // Small delay for service to start + Sleep(1000); + + // Import 802.1x profile to wired interface + LogMsg('Importing 802.1x profile...'); + if ExecNetsh('lan add profile filename="' + ProfilePath + '" interface="' + InterfaceName + '"') <> 0 then + begin + // Try without interface specification as fallback + LogMsg('Retrying without interface specification...'); + ExecNetsh('lan add profile filename="' + ProfilePath + '"'); + end; + + LogMsg('Wired network configuration complete.'); +end; + +function ConfigureWirelessNetwork: Boolean; +var + InterfaceName, ProfilePath: String; +begin + Result := True; + InterfaceName := GetWirelessInterfaceName; + ProfilePath := ExpandConstant('{tmp}\AESFMA.xml'); + + LogMsg(''); + LogMsg('=== Configuring Wireless Network ==='); + LogMsg('Interface: ' + InterfaceName); + LogMsg('Profile: ' + ProfilePath); + + // Enable and start WLAN AutoConfig service + SetServiceAutoStart('Wlansvc'); + StartService('WLAN AutoConfig'); + + // Small delay for service to start + Sleep(1000); + + // Import AESFMA profile to wireless interface + LogMsg('Importing AESFMA profile...'); + if ExecNetsh('wlan add profile filename="' + ProfilePath + '" interface="' + InterfaceName + '"') <> 0 then + begin + // Try without interface specification as fallback + LogMsg('Retrying without interface specification...'); + ExecNetsh('wlan add profile filename="' + ProfilePath + '"'); + end; + + LogMsg('Wireless network configuration complete.'); +end; + +procedure ReconnectNetwork(NetworkType: Integer); +var + WiredInterface, WirelessInterface: String; +begin + WiredInterface := GetWiredInterfaceName; + WirelessInterface := GetWirelessInterfaceName; + + LogMsg(''); + LogMsg('=== Reconnecting Network ==='); + + if NetworkType = NET_WIRED then + begin + LogMsg('Reconnecting wired interface...'); + ExecNetsh('lan reconnect interface="' + WiredInterface + '"'); + end + else if NetworkType = NET_WIRELESS then + begin + LogMsg('Connecting to AESFMA wireless network...'); + ExecNetsh('wlan connect name=AESFMA ssid=AESFMA interface="' + WirelessInterface + '"'); + end; +end; + +// ============================================================================ +// MAIN CONFIGURATION PROCEDURE +// ============================================================================ + +function PerformConfiguration: Boolean; +var + ActiveNetwork: Integer; + WindowsVersion: String; +begin + Result := True; + LogMessages := ''; + + // Log Windows version + if IsWindows10OrLater then + WindowsVersion := 'Windows 10/11' + else + WindowsVersion := 'Windows 7/8'; + + LogMsg('Machine Authentication 3.0 Configuration'); + LogMsg('========================================'); + LogMsg('Windows Version: ' + WindowsVersion); + LogMsg(''); + + // Stop NetworkAdapterManager if it exists (may not exist on all machines) + LogMsg('Stopping NetworkAdapterManager (if present)...'); + StopService('NetworkAdapterManager'); + + // Detect active network + ActiveNetwork := DetectActiveNetwork; + + // Configure wired network + ProgressPage.SetText('Configuring wired network...', ''); + ProgressPage.SetProgress(1, 5); + ConfigureWiredNetwork; + + // Configure wireless network + ProgressPage.SetText('Configuring wireless network...', ''); + ProgressPage.SetProgress(2, 5); + ConfigureWirelessNetwork; + + // Reconnect active network + ProgressPage.SetText('Reconnecting network...', ''); + ProgressPage.SetProgress(3, 5); + ReconnectNetwork(ActiveNetwork); + + // Start NetworkAdapterManager if it was stopped + LogMsg(''); + LogMsg('Starting NetworkAdapterManager (if present)...'); + StartService('NetworkAdapterManager'); + + // Wait for network to stabilize + ProgressPage.SetText('Waiting for network to stabilize...', ''); + ProgressPage.SetProgress(4, 5); + LogMsg(''); + LogMsg('Waiting 10 seconds for network to stabilize...'); + Sleep(10000); + + ProgressPage.SetProgress(5, 5); + + LogMsg(''); + LogMsg('========================================'); + LogMsg('Configuration complete!'); + LogMsg(''); + LogMsg('The machine should now have access to the Machine VLAN.'); + LogMsg('Test vault access to confirm connectivity.'); +end; + +// ============================================================================ +// WIZARD EVENTS +// ============================================================================ + +procedure InitializeWizard; +begin + // Create progress page + ProgressPage := CreateOutputProgressPage('Configuring Network', + 'Please wait while Machine Authentication 3.0 is configured...'); +end; + +function InitializeSetup: Boolean; +begin + Result := True; + + // Verify admin privileges + if not IsAdmin then + begin + MsgBox('This installer requires administrator privileges.' + #13#10 + + 'Please right-click and select "Run as administrator".', + mbError, MB_OK); + Result := False; + end; +end; + +procedure CurStepChanged(CurStep: TSetupStep); +var + ResultForm: TSetupForm; + Memo: TNewMemo; + OKButton: TNewButton; +begin + if CurStep = ssPostInstall then + begin + // Show progress page and perform configuration + ProgressPage.Show; + try + PerformConfiguration; + finally + ProgressPage.Hide; + end; + + // Show results in non-silent mode + if not WizardSilent then + begin + ResultForm := CreateCustomForm; + ResultForm.Caption := 'Configuration Results'; + ResultForm.ClientWidth := 600; + ResultForm.ClientHeight := 450; + ResultForm.Position := poScreenCenter; + + Memo := TNewMemo.Create(ResultForm); + Memo.Parent := ResultForm; + Memo.Left := 10; + Memo.Top := 10; + Memo.Width := ResultForm.ClientWidth - 20; + Memo.Height := ResultForm.ClientHeight - 60; + Memo.ScrollBars := ssVertical; + Memo.ReadOnly := True; + Memo.Text := LogMessages; + Memo.Font.Name := 'Consolas'; + Memo.Font.Size := 9; + + OKButton := TNewButton.Create(ResultForm); + OKButton.Parent := ResultForm; + OKButton.Caption := 'OK'; + OKButton.Width := 80; + OKButton.Height := 30; + OKButton.Left := (ResultForm.ClientWidth - OKButton.Width) div 2; + OKButton.Top := ResultForm.ClientHeight - 45; + OKButton.ModalResult := mrOK; + OKButton.Default := True; + + ResultForm.ActiveControl := OKButton; + ResultForm.ShowModal; + ResultForm.Free; + end; + end; +end; + +function UpdateReadyMemo(Space, NewLine, MemoUserInfoInfo, MemoDirInfo, MemoTypeInfo, + MemoComponentsInfo, MemoGroupInfo, MemoTasksInfo: String): String; +var + WinVer, WiredInt, WirelessInt: String; +begin + if IsWindows10OrLater then + WinVer := 'Windows 10/11' + else + WinVer := 'Windows 7/8'; + + WiredInt := GetWiredInterfaceName; + WirelessInt := GetWirelessInterfaceName; + + Result := 'Machine Authentication 3.0 Configuration' + NewLine + + NewLine + + 'The following will be configured:' + NewLine + + NewLine + + Space + 'Windows Version: ' + WinVer + NewLine + + Space + 'Wired Interface: ' + WiredInt + NewLine + + Space + 'Wireless Interface: ' + WirelessInt + NewLine + + NewLine + + 'Actions:' + NewLine + + Space + '1. Enable Wired AutoConfig service (dot3svc)' + NewLine + + Space + '2. Import 802.1x profile for wired authentication' + NewLine + + Space + '3. Enable WLAN AutoConfig service (Wlansvc)' + NewLine + + Space + '4. Import AESFMA profile for wireless authentication' + NewLine + + Space + '5. Reconnect active network interface' + NewLine + + NewLine + + 'Note: Network will be briefly interrupted during configuration.'; +end; diff --git a/MachineAuth/README.md b/MachineAuth/README.md new file mode 100644 index 0000000..bfb07f0 --- /dev/null +++ b/MachineAuth/README.md @@ -0,0 +1,171 @@ +# Machine Authentication 3.0 + +Configures shop floor PCs for 802.1x/ISE Machine VLAN connectivity with support for both wired and wireless networks. + +## Overview + +This installer automates the configuration of 802.1x network authentication for GE Aerospace shop floor machines, enabling secure access to the Machine VLAN without requiring user credentials. + +## What It Configures + +| Network Type | Authentication | Server | +|--------------|----------------|--------| +| Wired | 802.1x PEAP/MS-CHAPv2 | Corporate Holdings RADIUS | +| Wireless | 802.1x EAP-TLS (certificate) | Aerospace FreeRADIUS | + +## Features + +- **Native Inno Setup Implementation** - All logic in Pascal script, no external batch files +- **Silent Installation Support** - Full automation for deployment tools +- **Windows 7/10/11 Support** - Auto-detects OS and uses appropriate interface names +- **Automatic Network Detection** - Identifies active interface (wired or wireless) +- **Detailed Logging** - Comprehensive log output for troubleshooting + +## Usage + +### Interactive Installation + +1. Run `MachineAuthSetup.exe` as Administrator +2. Review the configuration summary +3. Click Install +4. View results and verify connectivity + +### Silent Installation + +```batch +MachineAuthSetup.exe /VERYSILENT /SUPPRESSMSGBOXES +``` + +With logging: +```batch +MachineAuthSetup.exe /VERYSILENT /SUPPRESSMSGBOXES /LOG="C:\ma3_install.log" +``` + +## Configuration Details + +### Wired Network (8021x.xml) + +- **EAP Type:** 25 (PEAP) +- **Inner Method:** MS-CHAPv2 (Type 26) +- **Auth Mode:** Machine +- **Credentials:** Windows logon credentials +- **Service:** dot3svc (Wired AutoConfig) + +### Wireless Network (AESFMA.xml) + +- **SSID:** AESFMA +- **Security:** WPA2-Enterprise, AES +- **EAP Type:** 13 (EAP-TLS) +- **Auth Mode:** Machine (certificate-based) +- **Service:** Wlansvc (WLAN AutoConfig) + +## Interface Names + +| Windows Version | Wired Interface | Wireless Interface | +|-----------------|-----------------|-------------------| +| Windows 7/8 | Local Area Connection | Wireless Network Connection | +| Windows 10/11 | Ethernet | Wi-Fi | + +## Installation Steps + +1. Stop NetworkAdapterManager service (if present) +2. Enable and start Wired AutoConfig (dot3svc) +3. Import 802.1x profile to wired interface +4. Enable and start WLAN AutoConfig (Wlansvc) +5. Import AESFMA profile to wireless interface +6. Reconnect active network interface +7. Start NetworkAdapterManager service +8. Wait 10 seconds for network stabilization + +## Requirements + +- Windows 7, 8, 10, or 11 +- Administrator privileges +- SSL certificate for FreeRADIUS (pre-installed on managed machines) +- Standard network interface naming conventions + +## Files + +``` +MachineAuth/ +├── MachineAuth.iss # Inno Setup script +├── 8021x.xml # Wired 802.1x profile +├── AESFMA.xml # Wireless AESFMA profile +├── gea-logo.ico # Setup icon +├── banner.bmp # Wizard banner +├── banner-sm.bmp # Wizard small image +└── README.md # This file +``` + +## Legacy Files (Not Required) + +These files are from the original batch-based installer and are not used by the Inno Setup version: + +- `MA3NetworkConfigv4.bat` - Original batch script +- `ge_runasuser.exe` - Run-as-user utility +- `RebootDelay.exe` - Reboot delay utility +- `$PLUGINSDIR/` - NSIS plugin remnants + +## Troubleshooting + +### "Requires administrator privileges" +Right-click the installer and select "Run as administrator" + +### Network doesn't reconnect after configuration +1. Manually disconnect and reconnect the network adapter +2. Check Windows Services that dot3svc and/or Wlansvc are running +3. Verify the machine has the required certificates + +### AESFMA wireless doesn't connect +- Verify the FreeRADIUS SSL certificate is installed +- Check that the machine is in the correct AD group +- Ensure the wireless adapter supports WPA2-Enterprise + +### Wired 802.1x authentication fails +- Verify the machine account is in the correct AD group +- Check that the switch port is configured for 802.1x +- Review the RADIUS server logs for authentication errors + +### Check installed profiles + +Wired profiles: +```batch +netsh lan show profiles +``` + +Wireless profiles: +```batch +netsh wlan show profiles +``` + +### Remove and reinstall profiles + +Remove wired profile: +```batch +netsh lan delete profile interface="Ethernet" +``` + +Remove wireless profile: +```batch +netsh wlan delete profile name="AESFMA" +``` + +Then run the installer again. + +## Building + +1. Install [Inno Setup 6.x](https://jrsoftware.org/isdl.php) +2. Open `MachineAuth.iss` +3. Compile (F9) +4. Output: `Output/MachineAuthSetup.exe` + +## Technical Notes + +- No reboot required +- Brief network interruption during configuration (~10-15 seconds) +- Safe to run multiple times +- Does not remove existing profiles (adds/updates) + +## Author + +WJDT / GE Aerospace diff --git a/MachineAuth/READMENetwork.txt b/MachineAuth/READMENetwork.txt new file mode 100644 index 0000000..2d194f7 --- /dev/null +++ b/MachineAuth/READMENetwork.txt @@ -0,0 +1,33 @@ +Configure a Shop Floor Machine's network adapters for 802.1x/ISE +----------------------------------------------------------------- + +This file can be run on either Windows 7 or Windows 10 Machines - SFLD, MCE, or Business Imaged. + +This package creates/configures wired and wireless interfaces for 802.1x. +The wired network will be configured on the endpoint to use Corporate Holdings RADIUS servers. +The wireless network will be configured to use the new Aerospace FreeRADIUS servers. +This package will work on Legacy LOGON machines. + +This package works under the following assumptions: +1) The PC is either Win7 or Win10 +2) The default wired interface is named "Local Network Connection" (Win7) or "Ethernet" (Win10) +3) The default wireless interface is named "Wireless Network Connection" (Win7) or "Wi-Fi" (Win10) +4) The machine has the SSL certificate for FreeRADIUS authentication. This is required for AAA + +Execution +--------- +1) log in as admin +2) extract files to C:\Windows\Options\Packages\GEAerospace_MA_3x4_V01\ +3) open command prompt with admin privilege +4) change directory to C:\Windows\Options\Packages\AutomatedMigrationTool\ +5) execute file MA3NetworkConfigv4.exe + +> Machine will authorize to wired or wireless Machine VLAN without needing a reboot. +> Machine will change IP addresses after running this package. + + +File list: +- READMENetwork.txt +- MA3NetworkConfig4.bat +- 8021x.xml +- AESFMA.xml diff --git a/MachineAuth/banner-sm.bmp b/MachineAuth/banner-sm.bmp new file mode 100644 index 0000000000000000000000000000000000000000..8a3d38f0c8e0c1fb172a37d1312940b89d2f000b GIT binary patch literal 9798 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 Jd|q^){|hw}ZdL#Q literal 0 HcmV?d00001 diff --git a/MachineAuth/banner.bmp b/MachineAuth/banner.bmp new file mode 100644 index 0000000000000000000000000000000000000000..7bf651ef012a0f75298d32d6c2e294c31a068fa4 GIT binary patch literal 154542 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 literal 0 HcmV?d00001 diff --git a/MachineAuth/gea-logo.ico b/MachineAuth/gea-logo.ico new file mode 100644 index 0000000000000000000000000000000000000000..bf07366b6888e5f59be7fb1fd768cd7047b11cce GIT binary patch literal 9662 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 literal 0 HcmV?d00001 diff --git a/README.md b/README.md index 8749cda..b320b0d 100644 --- a/README.md +++ b/README.md @@ -10,6 +10,7 @@ Collection of Inno Setup installer packages for GE Aerospace manufacturing tools | [HIDCardPrinter](HIDCardPrinter/) | HID FARGO card printer driver installer | [README](HIDCardPrinter/README.md) | | [HPOfflineInstaller](HPOfflineInstaller/) | HP Universal Print Driver offline installer | [README](HPOfflineInstaller/README.md) | | [JT2GO](JT2GO/) | Siemens JT2Go installer with prerequisite checking | [README](JT2GO/README.md) | +| [MachineAuth](MachineAuth/) | 802.1x Machine Authentication 3.0 network configuration | [README](MachineAuth/README.md) | | [MappedDrive](MappedDrive/) | Network drive mapping tool | [README](MappedDrive/README.md) | | [NetworkDriveManager](NetworkDriveManager/) | Advanced network drive management with migration | [README](NetworkDriveManager/README.md) | | [PrinterInstaller](PrinterInstaller/) | Network printer installer with ShopDB integration | [README](PrinterInstaller/README.md) | @@ -33,8 +34,11 @@ Collection of Inno Setup installer packages for GE Aerospace manufacturing tools - **JT2GO** - Siemens JT2Go 3D CAD viewer with .NET/VC++ prerequisites - **ShopfloorConnect** - Teamcenter MTC Service for shop floor integration -### Utilities +### Network Configuration +- **MachineAuth** - 802.1x Machine Authentication 3.0 for Machine VLAN - **BlueSSOFix** - WiFi authentication repair for Blue SSO network + +### Utilities - **Template** - Starting point for creating new Inno Setup projects ## Requirements @@ -85,6 +89,7 @@ inno-installers/ ├── HIDCardPrinter/ # Card printer drivers ├── HPOfflineInstaller/ # HP printer drivers ├── JT2GO/ # CAD viewer installer +├── MachineAuth/ # 802.1x network configuration ├── MappedDrive/ # Drive mapping tool ├── NetworkDriveManager/ # Advanced drive management ├── PrinterInstaller/ # Network printer installer