Nombres principales
Para que un cliente cree una sesión autenticada mutuamente con un programa de servidor, debe proporcionar el nombre principal esperado del servidor. Algunos protocolos, como Kerberos, requieren un nombre principal de servidor correcto para cualquier sesión autenticada. Una entidad de seguridad es una entidad que reconoce el sistema de seguridad. Esto incluye usuarios humanos, así como servicios del sistema. Todos los nombres principales tienen un formato similar para un proveedor de soporte técnico de seguridad determinado (SSP). Un SSP es un módulo de software que realiza la validación de seguridad. Para obtener más información, consulte Información general sobre la arquitectura de SSPI. Para mantener la uniformidad, un proveedor de seguridad suele proporcionar nombres similares a los servicios del sistema como usuarios. En algunos proveedores de seguridad, es posible que los servicios del sistema no tengan un nombre principal.
El servidor registra su nombre principal para el proveedor de seguridad mediante la función RpcServerRegisterAuthInfo . Solo se puede usar un nombre principal de servidor para cada proveedor de seguridad. Si se registra más de un nombre, se elige y se usa aleatoriamente un nombre. El SSP dicta el formato del nombre principal. Por ejemplo, los SSP de Kerberos/Negotiate para un servicio del sistema se parecen aproximadamente a lo siguiente: machine_name$@childdomain.parentdomain1.parentdomain2.COM.
El procedimiento recomendado para generar nombres de entidad de seguridad consiste en usar API documentadas (como la función DsMakeSpn ), en lugar de combinar el nombre principal de las cadenas. El uso de API documentadas aumenta la portabilidad entre diferentes entornos de implementación y elimina la posibilidad de errores.
Especificar un nombre principal incorrecto puede impedir que el cliente y el servidor establezcan una sesión autenticada. SCHANNEL SSP toma nombres principales en cualquiera de las dos formas:
- El primer formulario de nombre principal de SCHANNEL es el formulario msstd . Los nombres en formato msstd suelen seguir el patrón msstd:servername@serverdomain.com. Esto se conoce como una propiedad de nombre de correo electrónico. Si el certificado contiene una propiedad de nombre de correo electrónico y contiene el signo (@), el nombre principal es msstd:email name. De lo contrario, debe contener la propiedad de nombre común. Las barras diagonales inversas internas se duplican, igual que en los enlaces de cadena.
- El segundo formulario de nombre principal de SCHANNEL es el formulario completo . Se trata de una serie de nombres compatibles con RFC1779 enlazados por corchetes angulares y separados por barras diagonales inversas. Normalmente sigue el patrón fullsic:\<Authority\SubAuthority\.....\Person> o fullsic:\<\Authority\SubAuthority\.....\ServerProgram>.
Si el nombre no coincide con el certificado, se devuelve ERROR_ACCESS_DENIED. Si el formato de nombre no es válido, SCHANNEL SSP devuelve el código ERROR_INVALID_PARAMETER.
Para consultar el nombre principal del servidor, las aplicaciones pueden llamar a RpcMgmtInqServerPrincName. Esto asigna una cadena terminada en null para contener el nombre principal. Antes de finalizar, la aplicación debe invocar RpcStringFree para liberar la memoria que ocupa esta cadena.
La consulta del nombre del servidor de esta manera no es segura y debe evitarse. Para la autenticación del servidor, el programa cliente debe saber a qué servidor se está conectando y debe crear el nombre principal del servidor desde cero.