Какой SPN я должен установить для net.tcp сервиса?

hextools.h

#ifndef HEX_TOOLS_H
#define HEX_TOOLS_H

char *bin2hex(unsigned char*, int);

unsigned char *hex2bin(const char*);

#endif // HEX_TOOLS_H

hextools.c

#include <stdlib.h>

char *bin2hex(unsigned char *p, int len)
{
    char *hex = malloc(((2*len) + 1));
    char *r = hex;

    while(len && p)
    {
        (*r) = ((*p) & 0xF0) >> 4;
        (*r) = ((*r) <= 9 ? '0' + (*r) : 'A' - 10 + (*r));
        r++;
        (*r) = ((*p) & 0x0F);
        (*r) = ((*r) <= 9 ? '0' + (*r) : 'A' - 10 + (*r));
        r++;
        p++;
        len--;
    }
    *r = '\0';

    return hex;
}

unsigned char *hex2bin(const char *str)
{
    int len, h;
    unsigned char *result, *err, *p, c;

    err = malloc(1);
    *err = 0;

    if (!str)
        return err;

    if (!*str)
        return err;

    len = 0;
    p = (unsigned char*) str;
    while (*p++)
        len++;

    result = malloc((len/2)+1);
    h = !(len%2) * 4;
    p = result;
    *p = 0;

    c = *str;
    while(c)
    {
        if(('0' <= c) && (c <= '9'))
            *p += (c - '0') << h;
        else if(('A' <= c) && (c <= 'F'))
            *p += (c - 'A' + 10) << h;
        else if(('a' <= c) && (c <= 'f'))
            *p += (c - 'a' + 10) << h;
        else
            return err;

        str++;
        c = *str;

        if (h)
            h = 0;
        else
        {
            h = 4;
            p++;
            *p = 0;
        }
    }

    return result;
}

main.c

#include <stdio.h>
#include "hextools.h"

int main(void)
{
    unsigned char s[] = { 0xa0, 0xf9, 0xc3, 0xde, 0x44 };

    char *hex = bin2hex(s, sizeof s);
    puts(hex);

    unsigned char *bin;
    bin = hex2bin(hex);

    puts(bin2hex(bin, 5));

    size_t k;
    for(k=0; k<5; k++)
        printf("%02X", bin[k]);

    putchar('\n');

    return 0;
}
6
задан Johnno Nolan 2 September 2008 в 08:49
поделиться

2 ответа

По умолчанию (т.е. из поля) net.tcp сервисы незащищены и не выполняют аутентификации вообще. Таким образом, Вам не будет нужно (и на самом деле не может) определять сервисное имя принципала.

Если необходимо пройти проверку подлинности, то проверьте net.tcp режимы безопасности на MSDN. Лучший способ понять различные комбинации состоит в том, чтобы экспериментировать!

3
ответ дан 10 December 2019 в 02:56
поделиться

Измените сервисную учетную запись на AD учетную запись и зарегистрируйте SPN's как показано. Используйте свое собственное сервисное название, например, fooservice

setspn-A fooservice/servermachinename domain\serviceAccountName
setspn-A fooservice/servermachinename.fullyqualifieddomainname domain\serviceAccountName

В клиентском наборе конфигурации:

<identity>
    <serviceprincipalname value="fooservice/servermachinename" />
</identity>
6
ответ дан 10 December 2019 в 02:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: