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 <mainardinicho...@gmail.com>: > 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" <julien.pie...@oracle.com> 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 <mainardinicho...@gmail.com >>> >: >>> >>> 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 < >>>> mainardinicho...@gmail.com>: >>>> >>>> Anyone up for a possible solution? >>>>> >>>>> 2016-02-06 14:51 GMT+01:00 Nicholas Mainardi < >>>>> mainardinicho...@gmail.com> >>>>> : >>>>> >>>>> 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 <julien.pie...@oracle.com>: >>>>>> >>>>>> 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 <julien.pie...@oracle.com>: >>>>>>>> >>>>>>>> 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 >>>>>>>>> dev-tech-crypto@lists.mozilla.org >>>>>>>>> https://lists.mozilla.org/listinfo/dev-tech-crypto >>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>> dev-tech-crypto mailing list >>>>>>> dev-tech-crypto@lists.mozilla.org >>>>>>> https://lists.mozilla.org/listinfo/dev-tech-crypto >>>>>>> >>>>>>> >>>>>> >> -- >> dev-tech-crypto mailing list >> dev-tech-crypto@lists.mozilla.org >> https://lists.mozilla.org/listinfo/dev-tech-crypto >> > -- dev-tech-crypto mailing list dev-tech-crypto@lists.mozilla.org https://lists.mozilla.org/listinfo/dev-tech-crypto