From: Martin Bosslet Date: 2010-12-27T01:07:14+09:00 Subject: [ruby-core:33906] [Ruby 1.9-Feature#4183] [ext/openssl] Timestamp support --mimepart_4d176831f1bf5_3346b34a62e4269 Content-Type: text/plain Content-Transfer-Encoding: Quoted-printable Content-Disposition: inline Issue #4183 has been updated by Martin Bosslet. File ts2.tar.gz added Thanks for the input! I updated the code with regard to Aaron's and Nobuy= oshi's comments. Concerning Nobuyoshi's questions: >Just curious for my eyes, >In ossl_ts_verify(): >1068 if (!(ctx->store =3D X509_STORE_new())) { >1069 ossl_raise(eTimestampError, NULL); >1070 goto end; >1071 } >Jump to clean-up after raise? >1109 end: >1110 TS_VERIFY_CTX_free(ctx); >1111 return ret; I corrected this, cleanup is now performed before the raise. >In ossl_tsfac_create_ts(): >1231 if (!(inter_certs =3D sk_X509_new_null())) goto end; >When inter_certs can't get created, all the rest are just skipped? I forgot to set the error message there. Corrected this, now an error is = raised when allocation fails. >1232 if (tsa_cert) >1233 if (rb_obj_is_kind_of(additional_certs, rb_cArray)) { >1234 for (i =3D 0; i < RARRAY_LEN(additional_certs); i++) { >1235 cert =3D rb_ary_entry(additional_certs, i); >1236 sk_X509_push(inter_certs, GetX509CertPtr(cert)); >1237 } >1238 } >1239 else { >1240 sk_X509_push(inter_certs, GetX509CertPtr(additional_cer= ts)); >1241 } >Just indentation of 1233..1241 is wrong, or 1232 is misplaced? No, you're right, it was simply misplaced, I removed it. Regarding your patch, I already applied it in the update. There is still some functionality that is not supported and some features= I dislike about the way OpenSSL handles timestamp verification. Concerni= ng the missing functionality - I'm planning to add this in case the featu= re will be accepted, I first wanted to get your reactions before I indulg= e too deeply in something nobody would want anyway :) Missing features ri= ght now are: - Extensions are neither supported for Request nor for the Response - Accuracy and TSAName are not supported for the Response. - I'd like to add some factory methods, that create Responses indicating = errors easily. E.g. = error_ts =3D OpenSSL::Timestamp::Response.create_fault_response(OpenSSL::= Timestamp::Response::REJECTION, :UNACCEPTED_P= OLICY, "The policy y= ou provided is not supported by this server") This would simplify error creation for errors detected on the server side= when manually analyzing the Request. Things I would like different: - I don't like the fact that for verification, you need to pass OpenSSL a= BIO, even if you're still in possession of the TS_REQ*, as in our case (= and I guess in most use cases). This forces encoding (and later decoding = in OpenSSL) the TS_REQ*, which is unnecessary. I'll try to submit a patch= to OpenSSL regarding this. - The second thing I'm not really happy with is the fact that you cannot = validate a timestamp solely based on the timestamp end entity certificate= , verification always includes certificate validation of the entire chain= . This is too tightly coupled in my opinion, certificate validation shoul= d only be an option (so that there is the possibility to perform it in a = separate step). In addition, decoupling would also remove the necessity t= o provide intermediate certificates or root certificates. If the timestam= p already contains the timestamp authority certificate(which it must if R= equest#cert_requested? is true), validation would be self-contained, no o= ther external resources needed. I'll also try to submit a patch for this = to OpenSSL. @Hiroshi: thanks for the confidence, I'm happy to help :) Regards, Martin ---------------------------------------- http://redmine.ruby-lang.org/issues/show/4183 ---------------------------------------- http://redmine.ruby-lang.org --mimepart_4d176831f1bf5_3346b34a62e4269 Content-Type: application/x-gzip; name=ts2.tar.gz Content-Transfer-Encoding: Base64 Content-Disposition: attachment; filename=ts2.tar.gz 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 --mimepart_4d176831f1bf5_3346b34a62e4269--