pam_pkcs11 - 피어의 인증서 발급자가 사용자에 의해 신뢰되지 않는 것으로 표시되었습니다.

pam_pkcs11 - 피어의 인증서 발급자가 사용자에 의해 신뢰되지 않는 것으로 표시되었습니다.

스마트 카드로 PAM을 사용하려고 할 때마다 pam_pkcs11.so다음 오류가 발생합니다.

DEBUG:cert_vfy.c:38: Couldn't verify Cert: Peer's ceritifacte issuer has been marked as not trusted by the user

.pem키카드에서 CA의 공개 인증서를 추출하여 (확인된 형식) 파일로 저장했는데 왜 이 오류가 발생하는지 잘 모르겠습니다. /etc/pam_pkcs11/cacerts/전체 경로는 입니다 /etc/pam_pkcs11/cacerts/X_CA_Class_B_03.pem.

또한 이 폴더에 필요한 심볼릭 링크를 수동으로 생성했지만 최근 도구에서 내 파일에 대한 심볼릭 링크를 pkcs11_make_hash_link생성했습니다 .X5f12asd.0X_CA_Class_B_03.pem

이 모든 것이 좋아 보이므로 지금 구성하십시오.

/etc/pam_pkcs11/pam_pkcs11.conf

pam_pkcs11 {
    nullok = true;
    debug = ture;

    use_first_pass = false;

    use_athok = false;

    use_pkcs11_module = externalModule;

    pkcs11_module externalModule {
        module = /opt/extlib/libp11.so;
        description = "My SmartCard lib";

        slot = 2;

        ca_dir = /etc/pam_pkcs11/cacerts;
        crl_dir = /etc/pam_pkcs11/crls;

        cert_policy = ca, crl_off;
        crl_policy = none; # Just for the sake of it
    }

    user_mappers = ldap;

    mapper ldap {
        debug = true;
        module = "/usr/lib64/pam_pkcs11/ldap_mapper.so";

        ldaphost = "10.0.0.3";

        ldapport = ;

        URI = "";

        scope = 2;
        binddn = "dn=admin,dc=server,dc=world";
        paswd = "superSecretPasswort_nonotreally";

        base = "dc=server,dc=world";

        attribute = "userCertificate";
        filter = "(&(objectClass=posixAccount)(uid=%s))"

        ssl = off
    }
}

/etc/pam.d/sudo

auth    required    pam_pkcs11.so debug

인증서와 일치하는 사용자 이름으로 사용자를 설정했습니다.주제 x5000UniqueID그리고 SerialNumber들판.
인증서 설정을 테스트하기 위해 올바른 핀 및 sudo와 함께 이것을 사용했습니다.

su testclient
sudo ls

그러면 다음과 같은 출력이 생성됩니다.

DEBUG:pam_config.c:248: Using config file /etc/pam_pkcs11/pam_pkcs11.conf
DEBUG:pam_config.c:203: Invalid CRL policy: crl_off 
DEBUG:pkcs11_lib.c:187: Initializing NSS ...
DEBUG:pkcs11_lib.c:197: Initializing NSS ... database=/etc/pam_pkcs11/nssdb
DEBUG:pkcs11_lib.c:215: ... NSS Complete
DEBUG:pam_pkcs11.c:308: username = [testclient]
DEBUG:pam_pkcs11.c:319: loading pkcs #11 module...
DEBUG:pkcs11_lib.c:227: Looking up module in list
DEBUG:pkcs11_lib.c:239: modList = 0x12412e0 next = 0x0

DEBUG:pkcs11_lib.c:231: dllName= <null>

DEBUG:pkcs11_lib.c:277: loading Module explictly, moduleSpec=<library="/opt/extlib/libp11.so" name="SmartCard"> module=/opt/extlib/libp11.so
DEBUG:pkcs11_lib.c:291: load module complete
DEBUG:pam_pkcs11.c:334: initialising pkcs #11 module...
Smart card found.
Welcome Smart Card!
Smart card PIN: ##########
DEBUG:pkcs11_lib.c:760: cert 0: found (Smart Card: aut + enc), "[email protected],OID.1.3.3.11=#14981257125874433,serialNumber=testclient,CN=Company AB testclient /testclient,givenName=Company AB,SN=testclient,O=Corp,C=COM"
DEBUG:mapper_mgr.c:172: Retrieveing mapper module list
DEBUG:mapper_mgr.c:95: Loading dynamic module for mapper 'ldap'
DEBUG:ldap_mapper.c:1164: test ssltls = off
DEBUG:ldap_mapper.c:1166: LDAP mapper started.
DEBUG:ldap_mapper.c:1167: debug         = 1
DEBUG:ldap_mapper.c:1168: ignorecase    = 0
DEBUG:ldap_mapper.c:1169: ldaphost      = 10.0.0.3
DEBUG:ldap_mapper.c:1170: ldapport      = 0
DEBUG:ldap_mapper.c:1171: ldapURI       =
DEBUG:ldap_mapper.c:1172: scope         = 2
DEBUG:ldap_mapper.c:1173: binddn        = dn=admin,dc=server,dc=world
DEBUG:ldap_mapper.c:1174: passwd        = superSecretPasswort_nonotreally
DEBUG:ldap_mapper.c:1175: base          = dc=server,dc=world
DEBUG:ldap_mapper.c:1176: attribute     = userCertificate
DEBUG:ldap_mapper.c:1177: uid_attribute = (null)
DEBUG:ldap_mapper.c:1181: filter        = (&(objectClass=posixAccount)(uid=%s))
DEBUG:ldap_mapper.c:1182: searchtimeout = 20
DEBUG:ldap_mapper.c:1183: ssl_on        = 0
DEBUG:ldap_mapper.c:1185: tls_randfile  =
DEBUG:ldap_mapper.c:1186: tls_cacertfile=
DEBUG:ldap_mapper.c:1187: tls_cacertdir =
DEBUG:ldap_mapper.c:1188: tls_checkpeer = -1
DEBUG:ldap_mapper.c:1189: tls_ciphers   =
DEBUG:ldap_mapper.c:1190: tls_cert      =
DEBUG:ldap_mapper.c:1191: tls_key       =
DEBUG:mapper_mgr.c:196: Inserting mapper [ldap] into list
DEBUG:pam_pkcs11.c:551: verifying the certificate #1
verifying certificate
DEBUG:cert_vfy.c:34: Verifying Cert: Smart Card: aut + enc ([email protected],OID.1.3.3.11=#14981257125874433,serialNumber=testclient,CN=Company AB testclient /testclient,givenName=Company AB,SN=testclient,O=Corp,C=COM)
DEBUG:cert_vfy.c:38: Couldn't verify Cert: Peer's certificate issuer has been marked as not trusted by the user.
ERROR:pam_pkcs11.c:585: verify_certificate() failed:
ERROR:pam_pkcs11.c:646: no valid certificate which meets all requirements found
Error 2336: No matching certificate found
DEBUG:mapper_mgr.c:213: unloading mapper module list
DEBUG:mapper_mgr.c:137: calling mapper_module_end() ldap
DEBUG:mapper_mgr.c:145: unloading module ldap

이제 이것은 많은 정보이며 기본적으로 다음과 같이 요약됩니다(제가 이해한 바에 따르면).

DEBUG:cert_vfy.c:38: Couldn't verify Cert: Peer's certificate issuer has been marked as not trusted by the user.

/etc/pam_pkcs11/cacerts/스마트 카드에서 CA를 내보내고 이를 넣고 올바른 심볼릭 링크를 생성하면 이 문제가 해결되지 않습니까 ?

(그런데 실제로 내 LDAP에 연결하여 사전에 무언가를 요청합니다. 그게 그것과 관련이 있습니까? pam_pkcs11이 LDAP에서 CA를 확인합니까?)

내가 어디서 잘못됐나요?

답변1

certutil귀하의 케이스에 있는 데이터베이스 에 인증서를 추가 /etc/pam_pkcs11/nssdb하고 다음 위치에서 해시해야 합니다./etc/pam_pkcs11/cacerts

certutil -A -n nick_of_my_CA -t "TC,C,T" -d /etc/pam_pkcs11/nssdb -i my_ca.crt

관련 정보