VirtualBox

Changeset 64939 in vbox


Ignore:
Timestamp:
Dec 17, 2016 1:06:47 AM (8 years ago)
Author:
vboxsync
Message:

Additions/win: Don't depend on the checked in certificate, but rather extract the code signing certificates from VBoxGuest.sys and VBoxCertUtil.exe.

Location:
trunk/src/VBox/Main
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Main/include/GuestSessionImpl.h

    r64101 r64939  
    201201                      const Utf8Str          &aDest,
    202202                      uint32_t                aFlags,
    203                       GuestProcessStartupInfo startupInfo)
     203                      const GuestProcessStartupInfo &aStartupInfo)
    204204            : strSource(aSource),
    205205              strDest(aDest),
    206206              fFlags(aFlags),
    207               mProcInfo(startupInfo)
     207              mProcInfo(aStartupInfo)
    208208        {
    209209            mProcInfo.mExecutable = strDest;
  • trunk/src/VBox/Main/src-client/GuestSessionImplTasks.cpp

    r63186 r64939  
    14061406                        if (fInstallCert)
    14071407                        {
    1408                             /* Our certificate. */
    1409                             mFiles.push_back(InstallerFile("CERT/ORACLE_VBOX.CER",
    1410                                                            strUpdateDir + "oracle-vbox.cer",
    1411                                                            UPDATEFILE_FLAG_COPY_FROM_ISO | UPDATEFILE_FLAG_OPTIONAL));
    1412                             /* Our certificate installation utility. */
    1413                             /* First pass: Copy over the file + execute it to remove any existing
    1414                              *             VBox certificates. */
    1415                             GuestProcessStartupInfo siCertUtilRem;
    1416                             siCertUtilRem.mName = "VirtualBox Certificate Utility, removing old VirtualBox certificates";
    1417                             siCertUtilRem.mArguments.push_back(Utf8Str("remove-trusted-publisher"));
    1418                             siCertUtilRem.mArguments.push_back(Utf8Str("--root")); /* Add root certificate as well. */
    1419                             siCertUtilRem.mArguments.push_back(Utf8Str(strUpdateDir + "oracle-vbox.cer"));
    1420                             siCertUtilRem.mArguments.push_back(Utf8Str(strUpdateDir + "oracle-vbox.cer"));
    1421                             mFiles.push_back(InstallerFile("CERT/VBOXCERTUTIL.EXE",
    1422                                                            strUpdateDir + "VBoxCertUtil.exe",
    1423                                                            UPDATEFILE_FLAG_COPY_FROM_ISO | UPDATEFILE_FLAG_EXECUTE |
    1424                                                            UPDATEFILE_FLAG_OPTIONAL,
    1425                                                            siCertUtilRem));
    1426                             /* Second pass: Only execute (but don't copy) again, this time installng the
    1427                              *              recent certificates just copied over. */
    1428                             GuestProcessStartupInfo siCertUtilAdd;
    1429                             siCertUtilAdd.mName = "VirtualBox Certificate Utility, installing VirtualBox certificates";
    1430                             siCertUtilAdd.mArguments.push_back(Utf8Str("add-trusted-publisher"));
    1431                             siCertUtilAdd.mArguments.push_back(Utf8Str("--root")); /* Add root certificate as well. */
    1432                             siCertUtilAdd.mArguments.push_back(Utf8Str(strUpdateDir + "oracle-vbox.cer"));
    1433                             siCertUtilAdd.mArguments.push_back(Utf8Str(strUpdateDir + "oracle-vbox.cer"));
    1434                             mFiles.push_back(InstallerFile("CERT/VBOXCERTUTIL.EXE",
    1435                                                            strUpdateDir + "VBoxCertUtil.exe",
    1436                                                            UPDATEFILE_FLAG_EXECUTE | UPDATEFILE_FLAG_OPTIONAL,
    1437                                                            siCertUtilAdd));
     1408                            static struct { const char *pszDst, *pszIso; } const s_aCertFiles[] =
     1409                            {
     1410                                { "vbox.cer",           "CERT/VBOX.CER" },
     1411                                { "vbox-sha1.cer",      "CERT/VBOX_SHA1.CER" },
     1412                                { "vbox-sha256.cer",    "CERT/VBOX_SHA256.CER" },
     1413                                { "vbox-sha256-r3.cer", "CERT/VBOX_SHA256_R3.CER" },
     1414                                { "oracle-vbox.cer",    "CERT/ORACLE_VBOX.CER" },
     1415                            };
     1416                            uint32_t fCopyCertUtil = UPDATEFILE_FLAG_COPY_FROM_ISO;
     1417                            for (uint32_t i = 0; i < RT_ELEMENTS(s_aCertFiles); i++)
     1418                            {
     1419                                /* Skip if not present on the ISO. */
     1420                                uint32_t offIgn;
     1421                                size_t   cbIgn;
     1422                                rc = RTIsoFsGetFileInfo(&iso, s_aCertFiles[i].pszIso, &offIgn, &cbIgn);
     1423                                if (RT_FAILURE(rc))
     1424                                    continue;
     1425
     1426                                /* Copy the certificate certificate. */
     1427                                Utf8Str const strDstCert(strUpdateDir + s_aCertFiles[i].pszDst);
     1428                                mFiles.push_back(InstallerFile(s_aCertFiles[i].pszIso,
     1429                                                               strDstCert,
     1430                                                               UPDATEFILE_FLAG_COPY_FROM_ISO | UPDATEFILE_FLAG_OPTIONAL));
     1431
     1432                                /* Out certificate installation utility. */
     1433                                /* First pass: Copy over the file (first time only) + execute it to remove any
     1434                                 *             existing VBox certificates. */
     1435                                GuestProcessStartupInfo siCertUtilRem;
     1436                                siCertUtilRem.mName = "VirtualBox Certificate Utility, removing old VirtualBox certificates";
     1437                                siCertUtilRem.mArguments.push_back(Utf8Str("remove-trusted-publisher"));
     1438                                siCertUtilRem.mArguments.push_back(Utf8Str("--root")); /* Add root certificate as well. */
     1439                                siCertUtilRem.mArguments.push_back(strDstCert);
     1440                                siCertUtilRem.mArguments.push_back(strDstCert);
     1441                                mFiles.push_back(InstallerFile("CERT/VBOXCERTUTIL.EXE",
     1442                                                               strUpdateDir + "VBoxCertUtil.exe",
     1443                                                               fCopyCertUtil | UPDATEFILE_FLAG_EXECUTE | UPDATEFILE_FLAG_OPTIONAL,
     1444                                                               siCertUtilRem));
     1445                                fCopyCertUtil = 0;
     1446                                /* Second pass: Only execute (but don't copy) again, this time installng the
     1447                                 *              recent certificates just copied over. */
     1448                                GuestProcessStartupInfo siCertUtilAdd;
     1449                                siCertUtilAdd.mName = "VirtualBox Certificate Utility, installing VirtualBox certificates";
     1450                                siCertUtilAdd.mArguments.push_back(Utf8Str("add-trusted-publisher"));
     1451                                siCertUtilAdd.mArguments.push_back(Utf8Str("--root")); /* Add root certificate as well. */
     1452                                siCertUtilAdd.mArguments.push_back(strDstCert);
     1453                                siCertUtilAdd.mArguments.push_back(strDstCert);
     1454                                mFiles.push_back(InstallerFile("CERT/VBOXCERTUTIL.EXE",
     1455                                                               strUpdateDir + "VBoxCertUtil.exe",
     1456                                                               UPDATEFILE_FLAG_EXECUTE | UPDATEFILE_FLAG_OPTIONAL,
     1457                                                               siCertUtilAdd));
     1458                            }
    14381459                        }
    14391460                        /* The installers in different flavors, as we don't know (and can't assume)
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette