16 giu 2025

Connessione vecchio SQL e Windows 11 24H2 (errore 10054)...

Non vi capita, ma se vi capita di dovervi connettere a un DB di MSSQL 2005 da un client Windows 11, sappiate che potreste avere qualche difficoltà.
Parliamo di sistemi che non dovrebbero più essere in produzione (MSSQL 2005 ha terminato il supporto standard nel 2011), ma non per questo bisogna escluderne la possibilità.

Il problema principale lo si riscontra a causa di alcuni protocolli di cifratura dismessi con la release 24H2 di Windows 11, nello specifico i seguenti:

  • TLS_RSA_WITH_3DES_EDE_CBC_SHA
  • TLS_RSA_WITH_RC4_128_SHA
  • LS_RSA_WITH_RC4_128_MD5
SQL Management Studio, durante la connessione dovrebbe restituire un errore in cui indica che la connessione è stata forzatamente chiusa da remoto (errore 10054).

Per riabilitare i cifrari, possiamo preparare uno script interattivo per PowerShell (grazie AI):
------------------------------------------------------------
<#
.SYNOPSIS
    Script interattivo per abilitare o disabilitare i cifrari legacy (RC4, 3DES)
    necessari per la compatibilità con SQL Server 2005 su sistemi Windows recenti.
#>

function Backup-Registry {
    param([string]$Mode)

    $timestamp = Get-Date -Format 'yyyyMMdd_HHmmss'
    $path = "$env:SystemDrive\cipher_backup_${Mode}_$timestamp.reg"
    reg export "HKLM\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002" $path | Out-Null
    Write-Host "📁 Backup del registro salvato in: $path" -ForegroundColor Cyan
}

function Enable-LegacyCiphers {
    $regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002"
    $legacySuites = @(
        "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
        "TLS_RSA_WITH_RC4_128_SHA",
        "TLS_RSA_WITH_RC4_128_MD5"
    )

    Backup-Registry -Mode "enable"

    $currentCiphers = (Get-ItemProperty -Path $regPath).Functions
    $missing = $legacySuites | Where-Object { $_ -notin $currentCiphers }

    if ($missing.Count -gt 0) {
        Write-Host "➕ Aggiunta cipher suite legacy: $($missing -join ', ')" -ForegroundColor Yellow
        $newList = $currentCiphers + $missing
        Set-ItemProperty -Path $regPath -Name "Functions" -Value $newList
        Write-Host "✅ Cifrari legacy abilitati." -ForegroundColor Green
    } else {
        Write-Host "✅ Tutti i cifrari legacy sono già presenti." -ForegroundColor Green
    }
}

function Disable-LegacyCiphers {
    $regPath = "HKLM:\SYSTEM\CurrentControlSet\Control\Cryptography\Configuration\Local\SSL\00010002"
    $legacySuites = @(
        "TLS_RSA_WITH_3DES_EDE_CBC_SHA",
        "TLS_RSA_WITH_RC4_128_SHA",
        "TLS_RSA_WITH_RC4_128_MD5"
    )

    Backup-Registry -Mode "disable"

    $currentCiphers = (Get-ItemProperty -Path $regPath).Functions
    $filtered = $currentCiphers | Where-Object { $_ -notin $legacySuites }

    if ($filtered.Count -lt $currentCiphers.Count) {
        Write-Host "❌ Rimozione cipher suite legacy: $($legacySuites -join ', ')" -ForegroundColor Red
        Set-ItemProperty -Path $regPath -Name "Functions" -Value $filtered
        Write-Host "✅ Cifrari legacy disabilitati." -ForegroundColor Green
    } else {
        Write-Host "✅ Nessun cifrario legacy da rimuovere." -ForegroundColor Green
    }
}

function Show-Menu {
    Clear-Host
    Write-Host "╔═══════════════════════════════════════════╗"
    Write-Host "║     SQL Server 2005 Legacy Cipher Tool    ║"
    Write-Host "╚═══════════════════════════════════════════╝"
    Write-Host ""
    Write-Host "1. ✅ Abilita cifrari legacy (RC4, 3DES)"
    Write-Host "2. ❌ Disabilita cifrari legacy"
    Write-Host "3. 🚪 Esci"
    Write-Host ""
}

do {
    Show-Menu
    $choice = Read-Host "Seleziona un'opzione [1-3]"

    switch ($choice) {
        '1' { Enable-LegacyCiphers }
        '2' { Disable-LegacyCiphers }
        '3' { Write-Host "Uscita..." -ForegroundColor Cyan }
        default {
            Write-Host "❗ Scelta non valida. Riprova." -ForegroundColor Red
        }
    }

    if ($choice -ne '3') {
        Write-Host ""
        Pause
    }

} while ($choice -ne '3')
--------------------------------------------------------------

31 gen 2025

Comprimere sottocartelle ricorsivamente...

Se hai bisogno di comprimere automaticamente tutte le sottocartelle di una directory in file ZIP con lo stesso nome della cartella originale, ecco una soluzione semplice con PowerShell.

Requisiti

  • 7-Zip installato sul PC
  • Terminale aperto nella cartella che contiene le sottocartelle da comprimere

Get-ChildItem -Directory | ForEach-Object { & "C:\Program Files\7-Zip\7z.exe" a "$($_.Name).zip" "$($_.FullName)\" }


27 gen 2025

Evitare l'Account Microsoft durante installazione Windows 11 ...

Cavolo! è dal 2022 che non lascio un appunto o un pensiero...
Vediamo se riesco a riprendere il vizio :)

Il processo di installazione di Windows 11 obbliga l'utente a inserire un account Microsoft o a crearne uno nuovo. Tuttavia, questa operazione non è sempre necessaria o utile, soprattutto in ambito aziendale, dove la gestione centralizzata degli account non sempre avviene completamente in ambiente cloud.

Fortunatamente, esistono due comandi molto utili che utilizzo spesso per aggirare queste limitazioni:

  1. Eludere l'obbligo di connessione a Internet
    Quando il processo di installazione richiede una connessione a Internet per configurare un account Microsoft, è possibile premere Shift + F10. Si aprirà una finestra del Prompt dei comandi. A questo punto, inserire la seguente stringa e premere Invio:

    OOBE\BYPASSNRO

    Il sistema si riavvierà e permetterà di creare un account locale, evitando così la necessità di utilizzare un account Microsoft.

  2. Accedere a un ambiente desktop provvisorio
    Se avete già configurato una rete wireless o siete collegati a Internet e il sistema continua a richiedere un account Microsoft, è possibile accedere a un ambiente desktop temporaneo con la combinazione di tasti Ctrl + Shift + F3. Questo avvierà la modalità "Audit Mode", che consente di apportare modifiche, come scollegare le interfacce di rete o rimuovere le reti Wi-Fi configurate per errore, prima di completare l'installazione.

Questi trucchi possono essere particolarmente utili per chi desidera maggiore controllo durante l'installazione di Windows 11, soprattutto in contesti aziendali o per configurazioni personalizzate.

9 set 2022

Cos'è MTU ...

L' MTU (Unità Massima di Trasmissione) è un parametro che spesso non consideravo o che lasciavo a valore predefinito, senza curarmene.
L'unità di Trasmissione Massima è la dimensione più grande ammessa per un pacchetto, specificata in byte, che può essere inviato tramite un'interfaccia di rete.

Se il valore non è configurato correttamente nell'interfaccia, gli apparati di rete devono frammentare i pacchetti. Lo stack TCP/IP suddividerà il pacchetto in parti più piccole (frammenti) conformi all'MTU dell'interfaccia.

La frammentazione può avere implicazioni negative sulle prestazioni, uno dei motivi principali è l'impatto CPU/memoria per frammentare e poi riassemblare i pacchetti. Quando il pacchetto viene riassemblato, il dispositivo di rete deve archiviare tutti i frammenti per poi riassemblarli nel pacchetto originale. Questo processo può causare latenza.
Altra possibile problematica, è che i pacchetti frammentati potrebbero uscire dall'ordine con cui sono stati sezionati e alcuni tipi di dispositivi di rete potrebbero di conseguenza eliminarli, comportando l'intera ritrasmissione del pacchetto.

Nel mio caso ho avuto un problema derivato da quest'ultima problematica.
Nello specifico, se attivavo un una regola proxy su una rete con una determinata connettività, alcuni siti non riuscivano ad essere visualizzati mentre altri non venivano caricati completamente (curioso che senza regola proxy il problema non si verificasse, è una situazione che devo approfondire).

Seguendo il consiglio del supporto del'appliance firewall, ho fatto una verifica sui valori MTU per tutte le connettività configurate nel firewall (WAN1, WAN2, WAN3,..), utilizzando questo semplice comando:

ping -f -l 1472 1.1.1.1

Si consiglia di partire da 1472 bit perchè se poi uniamo i 20 per l'header IP e 8 dell'header ICMP, arriviamo a 1500 che sono lo standard.
Se ci viene segnalato che il pacchetto non è transitato perchè avrebbe dovuto essere frammentato, togliamo 8 bit al 1472 e riproviamo fino a quando non riusciremo a spedire il pacchetto. Ricordiamoci poi che a quel valore vanno aggiunti i 28 bit menzionati prima e quel totale sarà il valore MTU da impostare nella nostra interfaccia.

Nel mio caso tutte le connettività, VDSL paritetiche ma di provider diversi, avevano valori differenti e settando quelli ricavati dal metodo sopra indicato, le problematiche di navigazione sono sparite.