Skip to content

Windows 2.56.1.vfs.0.1: bundled OpenSSH requires absent msys-crypto-3.dll, breaking SSH commit signing #1023

Open

Description

Summary

The x64 Windows release 2.56.1.vfs.0.1 bundles an usr/bin/ssh.exe that imports msys-crypto-3.dll, but supplies usr/bin/msys-crypto-4.dll instead. msys-crypto-3.dll is absent. Signed commits fail with a missing-DLL error; the bundled ssh-keygen.exe also references msys-crypto-3.dll.

Environment

  • Windows, x64 Microsoft.Git installation managed through winget
  • winget package: Microsoft.Git, version 2.56.1.0.1
  • git --version: git version 2.56.1.vfs.0.1
  • Installation directory: C:\Program Files\Git
  • VS Code uses C:\Program Files\Git\cmd\git.exe

I initially isolated a reproducible failure to signed commits: committing with --no-gpg-sign works. Reinstalling Microsoft.Git did not resolve it. My VS Code logs also showed fetch failures, and I subsequently confirmed that my workflow needs both the transport and signing overrides below.

Independent release-artifact verification

I investigated the official release assets with Codex:
https://github.com/microsoft/git/releases/tag/v2.56.1.vfs.0.1

The installer Git-2.56.1.vfs.0.1-64-bit.exe has SHA-256:
1c9a21568c0b9ae30a892def89de9cf880ffb70b43189074a97dc23e665e5505
This matches the hash reported by winget. The available innoextract version could not extract this installer format, so the portable artifact was inspected independently instead.

Extracting the official PortableGit-2.56.1.vfs.0.1-64-bit.7z.exe into a fresh temporary directory shows:

  • usr/bin/ssh.exe contains a DLL import reference to msys-crypto-3.dll.
  • The archive contains usr/bin/msys-crypto-4.dll, but no msys-crypto-3.dll.
  • The extracted ssh.exe and msys-crypto-4.dll are byte-for-byte identical (SHA-256) to the installed files:
File SHA-256
usr/bin/ssh.exe 06315B1C4F988211CD4A915D64FB426366D822B5EF18FC53430B4446F390BC8F
usr/bin/msys-crypto-4.dll F46E7CCD849771CA8F23ABCF1C7B76BC6A68D9DFD1CBFA9535229A63D1B5EC47

This establishes that the inconsistent files are present in the published portable release, independently of the existing installation or upgrade history.

Expected behavior

Bundled OpenSSH and its bundled OpenSSL runtime dependencies should be compatible, allowing SSH-based Git operations without an external SSH override.

Signing-specific diagnosis and workaround

My configuration initially had gpg.format=ssh, commit.gpgsign=true, and no gpg.ssh.program override. SSH signing defaults to ssh-keygen, independently of the transport setting core.sshCommand.

Inspection of the installed usr/bin/ssh-keygen.exe also finds a reference to the absent msys-crypto-3.dll.

Setting only core.sshCommand=C:/Windows/System32/OpenSSH/ssh.exe did not fix my signed commits; it only changes SSH transport. Signing still failed with that override, while --no-gpg-sign succeeded.

I confirmed that both overrides below are required to temporarily restore my workflow:

git config --system core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe
git config --system gpg.ssh.program C:/Windows/System32/OpenSSH/ssh-keygen.exe

Windows' built-in ssh-keygen.exe was independently tested with a newly generated temporary Ed25519 key and ssh-keygen -Y sign -n git; signing succeeded with exit code 0. I applied both system-scoped overrides and confirmed that together they temporarily fix my workflow.

Activity

  1. dscho commented on Nov 12, 2026

    @dscho
    Member

    Ouch, sorry about that!

    Workaround

    Windows' built-in OpenSSH starts successfully (OpenSSH_for_Windows_9.5p2, LibreSSL 3.8.2). Configuring Git to use it avoids the bundled executable:

    git config --system core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe

    For what it's worth, this is actually already fully supported via an option when installing Microsoft Git via the installer (installing via winget does not let you choose that option).

  2. changed the title [-]Windows 2.56.1.vfs.0.1 bundles ssh.exe requiring absent msys-crypto-3.dll[/-] [+]Windows 2.56.1.vfs.0.1: bundled OpenSSH requires absent msys-crypto-3.dll, breaking SSH commit signing[/+] on Nov 12, 2026
  3. SheepReaper commented on Nov 13, 2026

    @SheepReaper
    Author

    Ouch, sorry about that!

    Workaround

    Windows' built-in OpenSSH starts successfully (OpenSSH_for_Windows_9.5p2, LibreSSL 3.8.2). Configuring Git to use it avoids the bundled executable:
    git config --system core.sshCommand C:/Windows/System32/OpenSSH/ssh.exe

    For what it's worth, this is actually already fully supported via an option when installing Microsoft Git via the installer (installing via winget does not let you choose that option).

    Indeed. I was also able to reinstall via winget with the corresponding argument

    winget install --id "Microsoft.Git" --exact --force --custom "/o:SSHOption=ExternalOpenSSH"

  4. cduivis commented on Nov 13, 2026

    @cduivis

    Same issue here, but from an in-place upgrade, not a fresh install. So anyone who runs winget upgrade on a working install will likely hit it too.

    • Before: Microsoft.Git 2.56.0.0.4 (2.56.0.vfs.0.4), installed through winget on Windows 11 x64, SSH working.
    • winget upgrade --all --include-unknown upgraded it to 2.56.1.0.1 (2.56.1.vfs.0.1).
    • After that, every git command over SSH shows: "The code execution cannot proceed because msys-crypto-3.dll was not found."

    The upgrade does not leave the old DLL in place. The installer log of 2.56.0.vfs.0.4 shows it writing usr\bin\msys-crypto-3.dll. After the upgrade that file is gone, and the 2.56.1 installer log only writes usr\bin\msys-crypto-4.dll.

    Besides ssh.exe, these files in usr\bin still reference msys-crypto-3.dll: ssh-add.exe, ssh-agent.exe, ssh-keygen.exe, ssh-keyscan.exe, msys-fido2-1.dll, msys-hcrypto-4.dll, msys-hx509-5.dll and msys-krb5-26.dll.

    Reinstalling with winget install --id Microsoft.Git -e --custom "/o:SSHOption=ExternalOpenSSH" fixed it for me.

    Many people run winget upgrade --all routinely, and some organizations run it automatically. It may be worth pulling 2.56.1.0.1 from winget-pkgs until a fixed release is out.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

No labels
No labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions