0

SSPI(Schannel)を使用して安全な接続を確立したい。
暗号スイートのAES256として使用できません。ここで見たように、AES256暗号スイートを無効にするために独自のアルゴリズムリストを定義する必要があります。ALG_IDパラメータをCALG_RSA_KEYXチッパーに設定しましたが、wiresharkキャプチャで、アプリケーションが「TLS_RSA_WITH_AES_256_CBC_SHA」を選択していることがわかります。

以下のコードスニペットは、安全なコンテキストを作成する方法を示しています。このコードはここから取得され、デフォルトのOSアルゴリズムを使用する代わりに、アルゴリズムのリストを取得するように変更しました。

TimeStamp        tsExpiry;
SECURITY_STATUS  Status;
DWORD            cSupportedAlgs = 0;
ALG_ID           rgbSupportedAlgs[16];
PCCERT_CONTEXT   pCertContext = NULL;


certEnhkeyUsage.rgpszUsageIdentifier = usages; 

// Build Schannel credential structure. Currently, this sample only
// specifies the protocol to be used (and optionally the certificate, 
// of course). Real applications may wish to specify other parameters as well.
ZeroMemory( &SchannelCred, sizeof(SchannelCred) );

SchannelCred.dwVersion  = SCHANNEL_CRED_VERSION;

SchannelCred.grbitEnabledProtocols = dwProtocol;

rgbSupportedAlgs[0] = CALG_RSA_KEYX;
cSupportedAlgs++;
SchannelCred.cSupportedAlgs    = cSupportedAlgs;
SchannelCred.palgSupportedAlgs = rgbSupportedAlgs;

// Flags indicate the context behaviour.
SchannelCred.dwFlags |= SCH_CRED_NO_DEFAULT_CREDS;
SchannelCred.dwFlags |= SCH_CRED_AUTO_CRED_VALIDATION;


// Create an SSPI credential.
Status = g_pSSPI->AcquireCredentialsHandleA( NULL,                 // Name of principal    
                                             UNISP_NAME_A,         // Name of package
                                             SECPKG_CRED_OUTBOUND, // Flags indicating use
                                             NULL,                 // Pointer to logon ID
                                             &SchannelCred,        // Package specific data
                                             NULL,                 // Pointer to GetKey() func
                                             NULL,                 // Value to pass to GetKey()
                                             phCreds,              // (out) Cred Handle
                                             &tsExpiry );          // (out) Lifetime (optional)

if(Status != SEC_E_OK) printf("**** Error 0x%x returned by AcquireCredentialsHandle\n", Status);

return Status;

誰かが私に理由を説明できますか?AES_256を無効にするにはどうすればよいですか?

前もって感謝します。

4

0 に答える 0