I found out that error -8172 is issued because of a cert duplicate found. Probably the self-signed root certificate is added twice to the trust chain because the building algorithm doesn't stop when it's found the first time, maybe because it's not considered a trust anchor. I recall that I check in DB of libnsspcki.so and the trust flags are C,C,C. Hence, which flags are needed in order to be considered trusted?
Thank You, Nicholas 2016-02-15 23:41 GMT+01:00 Nicholas Mainardi <[email protected]>: > Please, could someone give me a hint about this issue? Deadline for my > testing program is getting closer and I need to get it works. Otherwise I > should use the Cert_VerifyCertNow function even if it's deprecated. I would > like to add that I try to call also CERT_VerifyCertNow on the same input > chain used in PKIXVerifyCert, and it's properly working. It should mean > that the root self-signed certificate should be marked as trusted my > softoken DB. > > Thank You, > > Nicholas > > 2016-02-11 1:42 GMT+01:00 Nicholas Mainardi <[email protected]>: > >> I'm quite sure that the certificate should be trusted. I forgot to write >> it, but i actually found it using certutil in the CERT DB provided by >> "roots cert" module: >> >> certutil -L -d DB_dir -h all | grep 'root_cn' >> >> Returns the certificate with trusted flags C,C,C. So i think it means >> it's already trusted (i don't find stronger flags to set). Hence i cannot >> figure out why i'm getting an untrusted issuer error, since the certificate >> should be trusted. >> >> The DB loaded from root certs module should be the Mozilla's CA root >> certificates, so it should be secure relying on these certificates. >> >> Thank you, >> >> Nicholas >> Il 11/feb/2016 01:31, "Julien Pierre" <[email protected]> ha >> scritto: >> >>> Nicholas, >>> >>> Your root certificate needs to be trusted. Self-signed is fine, but you >>> still need to trust it. >>> >>> It would either need to be present in your cert DB, with the proper >>> trust flag, or you would need to dynamically set the trust on that root >>> certificate using the API . >>> You can use CERT_ChangeCertTrust or CERT_ChangeCertTrustByUsage to do so. >>> >>> Your root CA needs to be trusted prior to attempting any chain >>> build/verification, otherwise your verification will always fail. >>> If you have no trusted CAs, then all verifications will always fail. >>> >>> The same will be true whether you are using the legacy chain >>> verification code in NSS, or libpkix. >>> >>> Julien >>> >>> On 2/10/2016 05:26, Nicholas Mainardi wrote: >>> >>>> I go on with my investigation, and I find that error -8172 should be >>>> related to the fact that the root certificate is self-signed, even if >>>> it's >>>> in the trust store contained in Root Certs module. Indeed, I search >>>> through >>>> the reference SEC_ERROR_UNTRUSTED_ISSUER, and I find this error seems >>>> to be >>>> set only in this function >>>> <http://mxr.mozilla.org/nss/source/lib/certhigh/certvfy.c#404> in two >>>> cases: >>>> >>>> 1. The issuer cert is explicitly distrusted (code >>>> <http://mxr.mozilla.org/nss/source/lib/certhigh/certvfy.c#710>). >>>> However, >>>> CERTDB_TERMINAL_RECORD is never set in the certificates I parse; >>>> 2. The issuer cert is self-signed (code >>>> <http://mxr.mozilla.org/nss/source/lib/certhigh/certvfy.c#750>), as it >>>> can >>>> be seen by the comment. The root certificate of the Apple chain is >>>> self-signed, so I'm afraid that this is the check which fails. It seems >>>> pretty weird since usually root certificates are self-signed. >>>> >>>> Another test I perform seems to confirm that error -8172 is relative to >>>> the >>>> root certificate. Indeed, if I pass as a chain the server certificate >>>> and >>>> an intermediate CA certificate, without loading Root Certs module, I get >>>> error -8179, issuer not found. However, with the same input but with the >>>> module loaded, the error turns into -8172. Hence, either the >>>> aforementioned >>>> checks are done after the chain has been built, or the the error is >>>> raised >>>> when the root cert found in the module is being added to the built >>>> chain. >>>> >>>> Thank You, >>>> >>>> Nicholas >>>> >>>> 2016-02-09 18:24 GMT+01:00 Nicholas Mainardi < >>>> [email protected]>: >>>> >>>> About error -8101 with Facebook CA certificate, I found it should be >>>>> related with this bug >>>>> <https://bugzilla.mozilla.org/show_bug.cgi?id=1049176>, so it's a >>>>> certificate issue. However, with Apple's certificate chain, I got error >>>>> -8102 when I try to validate only the CA certificate, while error -8172 >>>>> trying to validate the whole chain. >>>>> It's likely I got the issue related to error -8102 by looking at the >>>>> source code. After a while, I got to this >>>>> < >>>>> http://mxr.mozilla.org/security/source/security/nss/lib/certdb/certdb.c#1219> >>>>> function. >>>>> Here, the key Encipherment Usage is setted as mandatory for every >>>>> certificate using RSA as pk algorithm. However, while this setting >>>>> could >>>>> make sense in end entity certificates (even if it's not correct because >>>>> there is no mandatory constraint about it in RFC), it's quite silly >>>>> with CA >>>>> certificates. Of course RSA can be used to encrypt a key also by CA, >>>>> but >>>>> it's not that common, hence it's a really strong requirement. I have >>>>> still >>>>> to figure out where does error -8172 come from (I suppose that the >>>>> issuer >>>>> is untrusted because the CA certificate has -1802 error), and why I got >>>>> invalid_args error by set as parameter of CERT_PKIXVerifyCert some >>>>> usages. >>>>> If someone can point me out why this happens, and confirm the possible >>>>> issues I have found, it would save me a lot of time. >>>>> >>>>> Thank You, >>>>> >>>>> Nicholas >>>>> >>>>> 2016-02-09 13:57 GMT+01:00 Nicholas Mainardi < >>>>> [email protected]>: >>>>> >>>>> Anyone up for a possible solution? >>>>>> >>>>>> 2016-02-06 14:51 GMT+01:00 Nicholas Mainardi < >>>>>> [email protected]> >>>>>> : >>>>>> >>>>>> If I remove cert_pi_certList from the array, invalid_args error turns >>>>>>> into untrusted_issuer error (-8172). So, it seems that even if I >>>>>>> don't add >>>>>>> the intermediate CA certificate in certList, the lookup in cert DB >>>>>>> is fine, >>>>>>> but it doesn't manage to validate the CA certificate. Indeed, if I >>>>>>> give >>>>>>> only the CA certificate as input, I got inadequate_cert_type error >>>>>>> (-8101). >>>>>>> Same result by removing also cert_pi_useAIACertFetch. I try to >>>>>>> change the >>>>>>> certificate usages parameter, but the error varies from >>>>>>> invalid_args to >>>>>>> inadeauqte_key_usage(-8102). >>>>>>> >>>>>>> I know that the certificate chain is correct, I have already used it >>>>>>> as >>>>>>> a testing input for other libraries, and I know I have a trust >>>>>>> anchor for >>>>>>> the CA certificate in my system root certificates. I think that the >>>>>>> issue >>>>>>> is the error inadequate_cert_type on the CA certificate, but I have >>>>>>> no idea >>>>>>> about what can cause this error. Moreover, I got invalid_args error >>>>>>> even >>>>>>> passing trustAnchors instead of cert_pi_certList. So, I suppose >>>>>>> there are >>>>>>> some issues with the processing made by Cert_PKIXVerifyCert function. >>>>>>> >>>>>>> Thank You, >>>>>>> >>>>>>> Nicholas >>>>>>> >>>>>>> 2016-02-06 2:42 GMT+01:00 Julien Pierre <[email protected]>: >>>>>>> >>>>>>> Nicholas, >>>>>>>> >>>>>>>> It looks like >>>>>>>> >>>>>>>> cert_pi_certList >>>>>>>> >>>>>>>> is indeed never processed. So that seems to be unimplemented. I'm >>>>>>>> not >>>>>>>> quite sure why that is. It's been a long type since I worked on >>>>>>>> NSS/libpkix. >>>>>>>> What happens if you remove that parameter from your list ? >>>>>>>> >>>>>>>> Once the certs are decoded, presumably in your parse_cert function, >>>>>>>> they will be available in the NSS softoken as temp certs, and will >>>>>>>> be >>>>>>>> searchable and findable by CERT_PKIXVerifyCert . >>>>>>>> The chain building should rebuild the chain (or possibly another >>>>>>>> chain). If you are using AIA fetch with cert_pi_useAIACertFetch, >>>>>>>> then >>>>>>>> presumably, your chain is possibly incomplete. >>>>>>>> Thus, you don't really want to use cert_pi_certList anyway, as that >>>>>>>> would imply no more building. >>>>>>>> >>>>>>>> I think if you remove the cert_pi_certList, and if you have a trust >>>>>>>> anchor in your softoken cert DB, then the rebuilding+validation >>>>>>>> should work. >>>>>>>> >>>>>>>> Julien >>>>>>>> >>>>>>>> On 2/5/2016 06:03, Nicholas Mainardi wrote: >>>>>>>> >>>>>>>> Hello, >>>>>>>>> >>>>>>>>> Thank you for your reply. I looked for the function you mentioned >>>>>>>>> and I >>>>>>>>> looked at the usage examples. I edit <http://pastebin.com/4BQsinXM> >>>>>>>>> my >>>>>>>>> previous code to use the function, but I'm getting error >>>>>>>>> invalid_args >>>>>>>>> (-8187). After some trials, I figure out it's caused by the >>>>>>>>> cert_pi_certList type in input parameter. Looking at how these >>>>>>>>> parameters >>>>>>>>> are processed, I got to this function >>>>>>>>> < >>>>>>>>> >>>>>>>>> http://mxr.mozilla.org/security/source/security/nss/lib/certhigh/certvfypkix.c#1509 >>>>>>>>> >>>>>>>>>> , >>>>>>>>>> >>>>>>>>> which contains a switch on the param type. However, it doesn't >>>>>>>>> exist a >>>>>>>>> case >>>>>>>>> for every types listed here >>>>>>>>> < >>>>>>>>> >>>>>>>>> http://mxr.mozilla.org/security/source/security/nss/lib/certdb/certt.h#898 >>>>>>>>> >>>>>>>>>> , >>>>>>>>>> >>>>>>>>> and the default case raise invalid_args. Isn't this a bug of this >>>>>>>>> function? >>>>>>>>> >>>>>>>>> However, I tried also with cert_pi_trustAnchors type (which has a >>>>>>>>> case >>>>>>>>> in >>>>>>>>> the function), but I got the same error. And also if I change the >>>>>>>>> certificate usage parameter, I got this error. So, is there >>>>>>>>> something >>>>>>>>> wrong >>>>>>>>> in the code I have written? >>>>>>>>> >>>>>>>>> Thanks, >>>>>>>>> >>>>>>>>> Nicholas >>>>>>>>> >>>>>>>>> 2016-02-04 1:14 GMT+01:00 Julien Pierre <[email protected] >>>>>>>>> >: >>>>>>>>> >>>>>>>>> CERT_VerifyCertNow is a legacy API that does not support the full >>>>>>>>> set >>>>>>>>> >>>>>>>>>> of >>>>>>>>>> RFC 3280/5280 features. >>>>>>>>>> To support things like policy checks, you can use libpkix . >>>>>>>>>> Look for CERT_PKIXVerifyCert . There are examples of usage in the >>>>>>>>>> NSS >>>>>>>>>> test >>>>>>>>>> programs vfychain and tstclnt . >>>>>>>>>> The library supports many more options than may be tested, though. >>>>>>>>>> >>>>>>>>>> Julien >>>>>>>>>> >>>>>>>>>> On 2/3/2016 08:37, Nicholas Mainardi wrote: >>>>>>>>>> >>>>>>>>>> Hello, >>>>>>>>>> >>>>>>>>>>> I'm comparing different libraries to verify X509 certificate >>>>>>>>>>> chains. >>>>>>>>>>> I had >>>>>>>>>>> some issues to find how to use NSS to perform this task. At the >>>>>>>>>>> end, >>>>>>>>>>> I >>>>>>>>>>> managed to get a working code with one certificate chain. You can >>>>>>>>>>> find the >>>>>>>>>>> code in this question >>>>>>>>>>> < >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>>> http://stackoverflow.com/questions/34982796/how-to-parse-and-validate-certificates-with-nss >>>>>>>>>>> I asked on stack overflow. I would like to know if the code I >>>>>>>>>>> wrote >>>>>>>>>>> is the >>>>>>>>>>> correct way to verify a certificate chain using NSS, and if >>>>>>>>>>> there are >>>>>>>>>>> other >>>>>>>>>>> parameters to customize the verify algorithm which can be set >>>>>>>>>>> (i.e. >>>>>>>>>>> a flag >>>>>>>>>>> to enable policy check etc.). If the code is correct, I suggest >>>>>>>>>>> it >>>>>>>>>>> could >>>>>>>>>>> be >>>>>>>>>>> added to NSS examples on the documentation. >>>>>>>>>>> >>>>>>>>>>> Thank You, >>>>>>>>>>> >>>>>>>>>>> Nicholas >>>>>>>>>>> >>>>>>>>>>> -- >>>>>>>>>>> >>>>>>>>>> dev-tech-crypto mailing list >>>>>>>>>> [email protected] >>>>>>>>>> https://lists.mozilla.org/listinfo/dev-tech-crypto >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>> dev-tech-crypto mailing list >>>>>>>> [email protected] >>>>>>>> https://lists.mozilla.org/listinfo/dev-tech-crypto >>>>>>>> >>>>>>>> >>>>>>> >>> -- >>> dev-tech-crypto mailing list >>> [email protected] >>> https://lists.mozilla.org/listinfo/dev-tech-crypto >>> >> > -- dev-tech-crypto mailing list [email protected] https://lists.mozilla.org/listinfo/dev-tech-crypto

