Попытка получить сертификат пользователя из Windows Active Directory с использованием java CertStore, но безуспешно - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь получить сертификат пользователя, связанный с доменным именем, из Windows Active Directory, но у меня возникают трудности с использованием Java API

, например, когда я использую инструмент команды ldapsearch, я могу чтобы получить сертификат, как показано ниже

ldapsearch -h 192.xx.2.xx  -D "CN=Administrator,CN=Users,DC=mmo,DC=co,DC=ca" -w Password -b "CN=rsa0,CN=Users,DC=mmo,DC=co,DC=ca" "userCertificate"

# extended LDIF
#
# LDAPv3
# base <CN=rsa0,CN=Users,DC=mmo,DC=co,DC=ca> with scope subtree
# filter: (objectclass=*)
# requesting: userCertificate 
#

# rsa0, Users, mmo.co.ca
dn: CN=rsa0,CN=Users,DC=mmo,DC=co,DC=ca
userCertificate:: MIIDbTCCAlWgAwIBAgIEFbvHazANBgkqhkiG9w0BAQsFADBnMQswCQYDVQQG
 EwJ1azEQMA4GA1UECBMHVW5rbm93bjEWMBQGA1UEBxMNcmlja21hbnN3b3J0aDERMA8GA1UEChMId
 m9jYWxpbmsxDDAKBgNVBAsTA2lwczENMAsGA1UEAxMEcnNhMDAeFw0xOTExMjExNDUwNDNaFw0yOT
 ExMTgxNDUwNDNaMGcxCzAJBgNVBAYTAnVrMRAwDgYDVQQIEwdVbmtub3duMRYwFAYDVQQHEw1yaWN
 rbWFuc3dvcnRoMREwDwYDVQQKEwh2b2NhbGluazEMMAoGA1UECxMDaXBzMQ0wCwYDVQQDEwRyc2Ew
 MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0R0yCr0uU80oFG3Zg0vTbR4NSR2St+w4f
 DOmoHQ27z1Q2JwhiNh1XkwC8MtVeGzRJw0pe+jXc2fMVbIqONHImOZuX6p1UMWof7fxMAIEfWq98u
 OqVbvbXVLeCE9+BJGsOaiJ70Q76e8tDNTH3vg1orXAvb0O7R0Vz9I0iXjJKzUtmFEBju/m3eoa+WI
 6OaBr64hJw7oz1CzPIKj0OcapFypFjr4+QKpRsHA4Nn21XrYSsT00Dk9SVK3NTjHm661crvTR6jSx
 j1GrCpVdQGCQ25a2RrHIi0cmclNJmy81PngW0cpdO3p9ZsZ2vPUy5/CNbVwqPEPSlIjJtVa0Xf9O1
 QIDAQABoyEwHzAdBgNVHQ4EFgQU1U7VOM/vAHL0pqZgi6TS1f0SAt8wDQYJKoZIhvcNAQELBQADgg
 EBAC7fK81BHDbF8PSQO2YznZtnzCMs46TwCezyqIFzQljwYA5wxKIytV7GtV4aEUrfIFIeQIMW812
 pMol9xIotULSl1I/2WI18QTIJfRAnkCZZPJIa9MU6nEGCouF1LwW9bzQzHOeI07NgCIyBryojXaxc
 L/epJtVxYialdI9mBWB8KDytINrylOcP9sXYaUtkOOiU7h0sBF9XBfzXgtTkF8pB7ObX9YJnyvzTn
 y2zVfeZD8Q7BtDL7AvIDcUjoHtYx5B0oD86aCNTSShmtB/ZEyqt8Kynqf+QUYQIWA3wVFjgZjCCwc
 NxiXuf6H8KGW8hP+ETKnc7u9XP9GCHINf9K0I=

# search result
search: 2
result: 0 Success

# numResponses: 2
# numEntries: 1

, однако, когда я пытаюсь использовать программу Java, я не могу получить его, ниже приведен пример java программы

package CertStore;

import javax.naming.AuthenticationException;
import javax.naming.AuthenticationNotSupportedException;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.naming.directory.DirContext;
import javax.naming.directory.InitialDirContext;
import javax.security.auth.x500.X500Principal;
import java.security.cert.*;
import java.util.*;
import java.io.*;

class CertStoreTest {
    CertStoreTest() {
        try {
            LDAPCertStoreParameters lcsp =
                    new LDAPCertStoreParameters("192.xx.2.xx", 389);

            String referenceID = "CN=rsa0,CN=Users,DC=bmo,DC=co,DC=ca";

            X509CertSelector xcs = new X509CertSelector();
            xcs.setSubject(referenceID);

            CertStore cs = CertStore.getInstance("LDAP", lcsp);

            Collection certificates = cs.getCertificates((CertSelector)xcs);

            System.out.println("size: "+ certificates.size());
            Iterator certificate = certificates.iterator();

            while(certificate.hasNext()) {
                System.out.println(certificate.next());
            }
        } catch(Exception e) {
            e.printStackTrace();
        }

    }
    public static void main(String[] args) {
        System.out.println("main() called.");
        CertStoreTest test = new CertStoreTest();
    }
}

Когда я запускаю эту программу, я получаю размер 0, где я ожидаю как 1.

main () вызвано. size: 0

У меня также есть openldap, работающий в системе linux, и в указанной выше программе java, если я указываю на этот сервер и с соответствующей информацией о доменном имени, java может получить сертификат, связанный с этим доменным именем.

Не уверен, что мне не хватает, когда я пытаюсь получить сертификат из Windows Active Directory.

Может кто-нибудь пролить свет на это, поскольку я застрял на несколько дней.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...