VirtualBox

Ignore:
Timestamp:
May 11, 2020 5:55:26 PM (5 years ago)
Author:
vboxsync
Message:

VBoxManage/ovasign,manual: Made --pkcs7 default. Tweaks. Documentation updates. bugref:9699

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VBoxManage/VBoxManageAppliance.cpp

    r84250 r84264  
    18411841    if (iVerbosity >= 2)
    18421842        RTMsgInfo("Scanning OVA '%s' for a manifest and signature...", pszOva);
    1843     enum { kScanning, kSeenManifest, kSeenSignature } enmState = kScanning;
     1843    char *pszSignatureName = NULL;
    18441844    for (;;)
    18451845    {
     
    18711871            && (enmType == RTVFSOBJTYPE_IO_STREAM || enmType == RTVFSOBJTYPE_FILE))
    18721872        {
    1873             if (   enmState >= kSeenManifest
    1874                 || *phVfsManifest != NIL_RTVFSFILE /* paranoia */)
     1873            if (*phVfsManifest != NIL_RTVFSFILE)
    18751874                rc = RTMsgErrorRc(VERR_DUPLICATE, "OVA contains multiple manifests! first: %s  second: %s",
    18761875                                  pStrManifestName->c_str(), pszName);
     1876            else if (pszSignatureName)
     1877                rc = RTMsgErrorRc(VERR_WRONG_ORDER, "Unsupported OVA file ordering! Signature file ('%s') as succeeded by '%s'.",
     1878                                  pszSignatureName, pszName);
    18771879            else
    18781880            {
    1879                 enmState = kSeenManifest;
    18801881                if (iVerbosity >= 2)
    18811882                    RTMsgInfo("Found manifest file: %s", pszName);
     
    18981899                 && (enmType == RTVFSOBJTYPE_IO_STREAM || enmType == RTVFSOBJTYPE_FILE))
    18991900        {
    1900             if (   enmState >= kSeenSignature
    1901                 || *phVfsOldSignature != NIL_RTVFSOBJ /* paranoia */)
     1901            if (*phVfsOldSignature != NIL_RTVFSOBJ)
    19021902                rc = RTMsgErrorRc(VERR_WRONG_ORDER, "Multiple signature files! (%s)", pszName);
    19031903            else
    19041904            {
    1905                 enmState = kSeenSignature;
    19061905                if (iVerbosity >= 2)
    19071906                    RTMsgInfo("Found existing signature file: %s", pszName);
     1907                pszSignatureName   = pszName;
    19081908                *phVfsOldSignature = hVfsObj;
     1909                pszName = NULL;
    19091910                hVfsObj = NIL_RTVFSOBJ;
    19101911            }
    19111912        }
    1912         else if (enmState >= kSeenManifest)
    1913             rc = RTMsgErrorRc(VERR_WRONG_ORDER, "Invalid OVA file ordering! (%s)", pszName);
     1913        else if (pszSignatureName)
     1914            rc = RTMsgErrorRc(VERR_WRONG_ORDER, "Unsupported OVA file ordering! Signature file ('%s') as succeeded by '%s'.",
     1915                              pszSignatureName, pszName);
    19141916
    19151917        /*
     
    19291931    else if (RT_SUCCESS(rc) && *phVfsOldSignature != NIL_RTVFSOBJ && !fReSign)
    19301932        rc = RTMsgErrorRc(VERR_ALREADY_EXISTS,
    1931                           "The OVA is already signed! (Use the --force option to force re-signing it.)");
    1932 
     1933                          "The OVA is already signed ('%s')! (Use the --force option to force re-signing it.)",
     1934                          pszSignatureName);
     1935
     1936    RTStrFree(pszSignatureName);
    19331937    return rc;
    19341938}
     
    19431947 * following the .cert file in that case.
    19441948 */
    1945 static int updateTheOvaSignature(RTVFSFSSTREAM hVfsFssOva, const char *pszOva,
    1946                                  const char *pszSignatureName, RTVFSFILE hVfsFileSignature, RTVFSOBJ hVfsOldSignature)
     1949static int updateTheOvaSignature(RTVFSFSSTREAM hVfsFssOva, const char *pszOva, const char *pszSignatureName,
     1950                                 RTVFSFILE hVfsFileSignature, RTVFSOBJ hVfsOldSignature, unsigned iVerbosity)
    19471951{
     1952    if (iVerbosity > 1)
     1953        RTMsgInfo("Writing '%s' to the OVA...", pszSignatureName);
     1954
    19481955    /*
    19491956     * Truncate the file at the old signature, if present.
     
    21292136                        {
    21302137                            if (iVerbosity > 1)
    2131                                 RTMsgInfo("Created PKCS#7/CMS signature: %zu bytes.", cbResult);
     2138                                RTMsgInfo("Created PKCS#7/CMS signature: %zu bytes, %s.",
     2139                                          cbResult, RTCrDigestTypeToName(enmDigestType));
    21322140
    21332141                            /*
     
    21762184    }
    21772185
     2186    /** @todo Use SHA-3 instead, better diversity. @bugref{9734} */
    21782187    RTDIGESTTYPE enmPkcs7DigestType;
    21792188    if (   enmDigestType == RTDIGESTTYPE_SHA1
     
    22442253                if (RT_SUCCESS(rc))
    22452254                {
     2255                    if (iVerbosity > 1)
     2256                        RTMsgInfo("Created OVA signature: %zu bytes, %s", cbSignature, RTCrDigestTypeToName(enmDigestType));
     2257
    22462258                    /*
    22472259                     * Verify the signature using the certificate to make sure we've
     
    22532265                    if (RT_SUCCESS(rc))
    22542266                    {
    2255                         if (iVerbosity > 0)
    2256                             RTMsgInfo("Created OVA signature: %zu bytes, %s", cbSignature, RTCrDigestTypeToName(enmDigestType));
     2267                        if (iVerbosity > 2)
     2268                            RTMsgInfo("  Successfully decoded and verified the OVA signature.\n");
    22572269
    22582270                        /*
     
    23312343        { "--digest-type",              'd', RTGETOPT_REQ_STRING },
    23322344        { "--pkcs7",                    '7', RTGETOPT_REQ_NOTHING },
     2345        { "--cms",                      '7', RTGETOPT_REQ_NOTHING },
    23332346        { "--no-pkcs7",                 'n', RTGETOPT_REQ_NOTHING },
     2347        { "--no-cms",                   'n', RTGETOPT_REQ_NOTHING },
    23342348        { "--intermediate-cert-file",   'i', RTGETOPT_REQ_STRING },
    23352349        { "--force",                    'f', RTGETOPT_REQ_NOTHING },
     
    23482362    Utf8Str         strPrivateKeyPassword;
    23492363    RTDIGESTTYPE    enmDigestType       = RTDIGESTTYPE_UNKNOWN;
    2350     bool            fPkcs7              = false;
     2364    bool            fPkcs7              = true;
    23512365    unsigned        cIntermediateCerts  = 0;
    23522366    const char     *apszIntermediateCerts[32];
     
    24122426                                                 RT_ELEMENTS(apszIntermediateCerts));
    24132427                apszIntermediateCerts[cIntermediateCerts++] = ValueUnion.psz;
     2428                fPkcs7 = true;
    24142429                break;
    24152430
     
    25082523                     * Update the OVA.
    25092524                     */
    2510                     rc = updateTheOvaSignature(hVfsFssOva, pszOva, strSignatureName.c_str(), hVfsFileSignature, hVfsOldSignature);
     2525                    rc = updateTheOvaSignature(hVfsFssOva, pszOva, strSignatureName.c_str(),
     2526                                               hVfsFileSignature, hVfsOldSignature, iVerbosity);
     2527                    if (RT_SUCCESS(rc) && iVerbosity > 0)
     2528                        RTMsgInfo("Successfully signed '%s'.", pszOva);
    25112529                }
    25122530            }
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