tortls.c 75 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423
  1. /* Copyright (c) 2003, Roger Dingledine.
  2. * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
  3. * Copyright (c) 2007-2011, The Tor Project, Inc. */
  4. /* See LICENSE for licensing information */
  5. /**
  6. * \file tortls.c
  7. * \brief Wrapper functions to present a consistent interface to
  8. * TLS, SSL, and X.509 functions from OpenSSL.
  9. **/
  10. /* (Unlike other tor functions, these
  11. * are prefixed with tor_ in order to avoid conflicting with OpenSSL
  12. * functions and variables.)
  13. */
  14. #include "orconfig.h"
  15. #if defined (WINCE)
  16. #include <WinSock2.h>
  17. #endif
  18. #include <assert.h>
  19. #ifdef MS_WINDOWS /*wrkard for dtls1.h >= 0.9.8m of "#include <winsock.h>"*/
  20. #ifndef WIN32_WINNT
  21. #define WIN32_WINNT 0x400
  22. #endif
  23. #ifndef _WIN32_WINNT
  24. #define _WIN32_WINNT 0x400
  25. #endif
  26. #define WIN32_LEAN_AND_MEAN
  27. #if defined(_MSC_VER) && (_MSC_VER < 1300)
  28. #include <winsock.h>
  29. #else
  30. #include <winsock2.h>
  31. #include <ws2tcpip.h>
  32. #endif
  33. #endif
  34. #include <openssl/ssl.h>
  35. #include <openssl/ssl3.h>
  36. #include <openssl/err.h>
  37. #include <openssl/tls1.h>
  38. #include <openssl/asn1.h>
  39. #include <openssl/bio.h>
  40. #include <openssl/opensslv.h>
  41. #if OPENSSL_VERSION_NUMBER < 0x00907000l
  42. #error "We require OpenSSL >= 0.9.7"
  43. #endif
  44. #ifdef USE_BUFFEREVENTS
  45. #include <event2/bufferevent_ssl.h>
  46. #include <event2/buffer.h>
  47. #include <event2/event.h>
  48. #endif
  49. #define CRYPTO_PRIVATE /* to import prototypes from crypto.h */
  50. #define TORTLS_PRIVATE
  51. #include "crypto.h"
  52. #include "tortls.h"
  53. #include "util.h"
  54. #include "torlog.h"
  55. #include "container.h"
  56. #include <string.h>
  57. #include "compat_libevent.h"
  58. /* Enable the "v2" TLS handshake.
  59. */
  60. #define V2_HANDSHAKE_SERVER
  61. #define V2_HANDSHAKE_CLIENT
  62. /* Copied from or.h */
  63. #define LEGAL_NICKNAME_CHARACTERS \
  64. "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"
  65. /** How long do identity certificates live? (sec) */
  66. #define IDENTITY_CERT_LIFETIME (365*24*60*60)
  67. #define ADDR(tls) (((tls) && (tls)->address) ? tls->address : "peer")
  68. /* We redefine these so that we can run correctly even if the vendor gives us
  69. * a version of OpenSSL that does not match its header files. (Apple: I am
  70. * looking at you.)
  71. */
  72. #ifndef SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
  73. #define SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x00040000L
  74. #endif
  75. #ifndef SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
  76. #define SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION 0x0010
  77. #endif
  78. /** Does the run-time openssl version look like we need
  79. * SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION? */
  80. static int use_unsafe_renegotiation_op = 0;
  81. /** Does the run-time openssl version look like we need
  82. * SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION? */
  83. static int use_unsafe_renegotiation_flag = 0;
  84. /** Structure that we use for a single certificate. */
  85. struct tor_cert_t {
  86. X509 *cert;
  87. uint8_t *encoded;
  88. size_t encoded_len;
  89. unsigned pkey_digests_set : 1;
  90. digests_t cert_digests;
  91. digests_t pkey_digests;
  92. };
  93. /** Holds a SSL_CTX object and related state used to configure TLS
  94. * connections.
  95. */
  96. typedef struct tor_tls_context_t {
  97. int refcnt;
  98. SSL_CTX *ctx;
  99. tor_cert_t *my_link_cert;
  100. tor_cert_t *my_id_cert;
  101. tor_cert_t *my_auth_cert;
  102. crypto_pk_env_t *link_key;
  103. crypto_pk_env_t *auth_key;
  104. } tor_tls_context_t;
  105. #define TOR_TLS_MAGIC 0x71571571
  106. /** Holds a SSL object and its associated data. Members are only
  107. * accessed from within tortls.c.
  108. */
  109. struct tor_tls_t {
  110. uint32_t magic;
  111. tor_tls_context_t *context; /** A link to the context object for this tls. */
  112. SSL *ssl; /**< An OpenSSL SSL object. */
  113. int socket; /**< The underlying file descriptor for this TLS connection. */
  114. char *address; /**< An address to log when describing this connection. */
  115. enum {
  116. TOR_TLS_ST_HANDSHAKE, TOR_TLS_ST_OPEN, TOR_TLS_ST_GOTCLOSE,
  117. TOR_TLS_ST_SENTCLOSE, TOR_TLS_ST_CLOSED, TOR_TLS_ST_RENEGOTIATE,
  118. TOR_TLS_ST_BUFFEREVENT
  119. } state : 3; /**< The current SSL state, depending on which operations have
  120. * completed successfully. */
  121. unsigned int isServer:1; /**< True iff this is a server-side connection */
  122. unsigned int wasV2Handshake:1; /**< True iff the original handshake for
  123. * this connection used the updated version
  124. * of the connection protocol (client sends
  125. * different cipher list, server sends only
  126. * one certificate). */
  127. /** True iff we should call negotiated_callback when we're done reading. */
  128. unsigned int got_renegotiate:1;
  129. /** Incremented every time we start the server side of a handshake. */
  130. unsigned int server_handshake_count:2;
  131. size_t wantwrite_n; /**< 0 normally, >0 if we returned wantwrite last
  132. * time. */
  133. /** Last values retrieved from BIO_number_read()/write(); see
  134. * tor_tls_get_n_raw_bytes() for usage.
  135. */
  136. unsigned long last_write_count;
  137. unsigned long last_read_count;
  138. /** If set, a callback to invoke whenever the client tries to renegotiate
  139. * the handshake. */
  140. void (*negotiated_callback)(tor_tls_t *tls, void *arg);
  141. /** Callback to invoke whenever a client tries to renegotiate more
  142. than once. */
  143. void (*excess_renegotiations_callback)(evutil_socket_t, short, void *);
  144. /** Argument to pass to negotiated_callback. */
  145. void *callback_arg;
  146. };
  147. #ifdef V2_HANDSHAKE_CLIENT
  148. /** An array of fake SSL_CIPHER objects that we use in order to trick OpenSSL
  149. * in client mode into advertising the ciphers we want. See
  150. * rectify_client_ciphers() for details. */
  151. static SSL_CIPHER *CLIENT_CIPHER_DUMMIES = NULL;
  152. /** A stack of SSL_CIPHER objects, some real, some fake.
  153. * See rectify_client_ciphers() for details. */
  154. static STACK_OF(SSL_CIPHER) *CLIENT_CIPHER_STACK = NULL;
  155. #endif
  156. /** The ex_data index in which we store a pointer to an SSL object's
  157. * corresponding tor_tls_t object. */
  158. static int tor_tls_object_ex_data_index = -1;
  159. /** Helper: Allocate tor_tls_object_ex_data_index. */
  160. static void
  161. tor_tls_allocate_tor_tls_object_ex_data_index(void)
  162. {
  163. if (tor_tls_object_ex_data_index == -1) {
  164. tor_tls_object_ex_data_index =
  165. SSL_get_ex_new_index(0, NULL, NULL, NULL, NULL);
  166. tor_assert(tor_tls_object_ex_data_index != -1);
  167. }
  168. }
  169. /** Helper: given a SSL* pointer, return the tor_tls_t object using that
  170. * pointer. */
  171. static INLINE tor_tls_t *
  172. tor_tls_get_by_ssl(const SSL *ssl)
  173. {
  174. tor_tls_t *result = SSL_get_ex_data(ssl, tor_tls_object_ex_data_index);
  175. if (result)
  176. tor_assert(result->magic == TOR_TLS_MAGIC);
  177. return result;
  178. }
  179. static void tor_tls_context_decref(tor_tls_context_t *ctx);
  180. static void tor_tls_context_incref(tor_tls_context_t *ctx);
  181. static X509* tor_tls_create_certificate(crypto_pk_env_t *rsa,
  182. crypto_pk_env_t *rsa_sign,
  183. const char *cname,
  184. const char *cname_sign,
  185. unsigned int lifetime);
  186. static int tor_tls_context_init_one(tor_tls_context_t **ppcontext,
  187. crypto_pk_env_t *identity,
  188. unsigned int key_lifetime);
  189. static tor_tls_context_t *tor_tls_context_new(crypto_pk_env_t *identity,
  190. unsigned int key_lifetime);
  191. static int check_cert_lifetime_internal(const X509 *cert, int tolerance);
  192. /** Global TLS contexts. We keep them here because nobody else needs
  193. * to touch them. */
  194. static tor_tls_context_t *server_tls_context = NULL;
  195. static tor_tls_context_t *client_tls_context = NULL;
  196. /** True iff tor_tls_init() has been called. */
  197. static int tls_library_is_initialized = 0;
  198. /* Module-internal error codes. */
  199. #define _TOR_TLS_SYSCALL (_MIN_TOR_TLS_ERROR_VAL - 2)
  200. #define _TOR_TLS_ZERORETURN (_MIN_TOR_TLS_ERROR_VAL - 1)
  201. #include "tortls_states.h"
  202. /** Return the symbolic name of an OpenSSL state. */
  203. static const char *
  204. ssl_state_to_string(int ssl_state)
  205. {
  206. static char buf[40];
  207. int i;
  208. for (i = 0; state_map[i].name; ++i) {
  209. if (state_map[i].state == ssl_state)
  210. return state_map[i].name;
  211. }
  212. tor_snprintf(buf, sizeof(buf), "Unknown state %d", ssl_state);
  213. return buf;
  214. }
  215. /** Write a description of the current state of <b>tls</b> into the
  216. * <b>sz</b>-byte buffer at <b>buf</b>. */
  217. void
  218. tor_tls_get_state_description(tor_tls_t *tls, char *buf, size_t sz)
  219. {
  220. const char *ssl_state;
  221. const char *tortls_state;
  222. if (PREDICT_UNLIKELY(!tls || !tls->ssl)) {
  223. strlcpy(buf, "(No SSL object)", sz);
  224. return;
  225. }
  226. ssl_state = ssl_state_to_string(tls->ssl->state);
  227. switch (tls->state) {
  228. #define CASE(st) case TOR_TLS_ST_##st: tortls_state = " in "#st ; break
  229. CASE(HANDSHAKE);
  230. CASE(OPEN);
  231. CASE(GOTCLOSE);
  232. CASE(SENTCLOSE);
  233. CASE(CLOSED);
  234. CASE(RENEGOTIATE);
  235. #undef CASE
  236. case TOR_TLS_ST_BUFFEREVENT:
  237. tortls_state = "";
  238. break;
  239. default:
  240. tortls_state = " in unknown TLS state";
  241. break;
  242. }
  243. tor_snprintf(buf, sz, "%s%s", ssl_state, tortls_state);
  244. }
  245. void
  246. tor_tls_log_one_error(tor_tls_t *tls, unsigned long err,
  247. int severity, int domain, const char *doing)
  248. {
  249. const char *state = NULL, *addr;
  250. const char *msg, *lib, *func;
  251. int st;
  252. st = (tls && tls->ssl) ? tls->ssl->state : -1;
  253. state = (st>=0)?ssl_state_to_string(st):"---";
  254. addr = tls ? tls->address : NULL;
  255. /* Some errors are known-benign, meaning they are the fault of the other
  256. * side of the connection. The caller doesn't know this, so override the
  257. * priority for those cases. */
  258. switch (ERR_GET_REASON(err)) {
  259. case SSL_R_HTTP_REQUEST:
  260. case SSL_R_HTTPS_PROXY_REQUEST:
  261. case SSL_R_RECORD_LENGTH_MISMATCH:
  262. case SSL_R_RECORD_TOO_LARGE:
  263. case SSL_R_UNKNOWN_PROTOCOL:
  264. case SSL_R_UNSUPPORTED_PROTOCOL:
  265. severity = LOG_INFO;
  266. break;
  267. default:
  268. break;
  269. }
  270. msg = (const char*)ERR_reason_error_string(err);
  271. lib = (const char*)ERR_lib_error_string(err);
  272. func = (const char*)ERR_func_error_string(err);
  273. if (!msg) msg = "(null)";
  274. if (!lib) lib = "(null)";
  275. if (!func) func = "(null)";
  276. if (doing) {
  277. log(severity, domain, "TLS error while %s%s%s: %s (in %s:%s:%s)",
  278. doing, addr?" with ":"", addr?addr:"",
  279. msg, lib, func, state);
  280. } else {
  281. log(severity, domain, "TLS error%s%s: %s (in %s:%s:%s)",
  282. addr?" with ":"", addr?addr:"",
  283. msg, lib, func, state);
  284. }
  285. }
  286. /** Log all pending tls errors at level <b>severity</b>. Use
  287. * <b>doing</b> to describe our current activities.
  288. */
  289. static void
  290. tls_log_errors(tor_tls_t *tls, int severity, int domain, const char *doing)
  291. {
  292. unsigned long err;
  293. while ((err = ERR_get_error()) != 0) {
  294. tor_tls_log_one_error(tls, err, severity, domain, doing);
  295. }
  296. }
  297. /** Convert an errno (or a WSAerrno on windows) into a TOR_TLS_* error
  298. * code. */
  299. static int
  300. tor_errno_to_tls_error(int e)
  301. {
  302. #if defined(MS_WINDOWS)
  303. switch (e) {
  304. case WSAECONNRESET: // most common
  305. return TOR_TLS_ERROR_CONNRESET;
  306. case WSAETIMEDOUT:
  307. return TOR_TLS_ERROR_TIMEOUT;
  308. case WSAENETUNREACH:
  309. case WSAEHOSTUNREACH:
  310. return TOR_TLS_ERROR_NO_ROUTE;
  311. case WSAECONNREFUSED:
  312. return TOR_TLS_ERROR_CONNREFUSED; // least common
  313. default:
  314. return TOR_TLS_ERROR_MISC;
  315. }
  316. #else
  317. switch (e) {
  318. case ECONNRESET: // most common
  319. return TOR_TLS_ERROR_CONNRESET;
  320. case ETIMEDOUT:
  321. return TOR_TLS_ERROR_TIMEOUT;
  322. case EHOSTUNREACH:
  323. case ENETUNREACH:
  324. return TOR_TLS_ERROR_NO_ROUTE;
  325. case ECONNREFUSED:
  326. return TOR_TLS_ERROR_CONNREFUSED; // least common
  327. default:
  328. return TOR_TLS_ERROR_MISC;
  329. }
  330. #endif
  331. }
  332. /** Given a TOR_TLS_* error code, return a string equivalent. */
  333. const char *
  334. tor_tls_err_to_string(int err)
  335. {
  336. if (err >= 0)
  337. return "[Not an error.]";
  338. switch (err) {
  339. case TOR_TLS_ERROR_MISC: return "misc error";
  340. case TOR_TLS_ERROR_IO: return "unexpected close";
  341. case TOR_TLS_ERROR_CONNREFUSED: return "connection refused";
  342. case TOR_TLS_ERROR_CONNRESET: return "connection reset";
  343. case TOR_TLS_ERROR_NO_ROUTE: return "host unreachable";
  344. case TOR_TLS_ERROR_TIMEOUT: return "connection timed out";
  345. case TOR_TLS_CLOSE: return "closed";
  346. case TOR_TLS_WANTREAD: return "want to read";
  347. case TOR_TLS_WANTWRITE: return "want to write";
  348. default: return "(unknown error code)";
  349. }
  350. }
  351. #define CATCH_SYSCALL 1
  352. #define CATCH_ZERO 2
  353. /** Given a TLS object and the result of an SSL_* call, use
  354. * SSL_get_error to determine whether an error has occurred, and if so
  355. * which one. Return one of TOR_TLS_{DONE|WANTREAD|WANTWRITE|ERROR}.
  356. * If extra&CATCH_SYSCALL is true, return _TOR_TLS_SYSCALL instead of
  357. * reporting syscall errors. If extra&CATCH_ZERO is true, return
  358. * _TOR_TLS_ZERORETURN instead of reporting zero-return errors.
  359. *
  360. * If an error has occurred, log it at level <b>severity</b> and describe the
  361. * current action as <b>doing</b>.
  362. */
  363. static int
  364. tor_tls_get_error(tor_tls_t *tls, int r, int extra,
  365. const char *doing, int severity, int domain)
  366. {
  367. int err = SSL_get_error(tls->ssl, r);
  368. int tor_error = TOR_TLS_ERROR_MISC;
  369. switch (err) {
  370. case SSL_ERROR_NONE:
  371. return TOR_TLS_DONE;
  372. case SSL_ERROR_WANT_READ:
  373. return TOR_TLS_WANTREAD;
  374. case SSL_ERROR_WANT_WRITE:
  375. return TOR_TLS_WANTWRITE;
  376. case SSL_ERROR_SYSCALL:
  377. if (extra&CATCH_SYSCALL)
  378. return _TOR_TLS_SYSCALL;
  379. if (r == 0) {
  380. log(severity, LD_NET, "TLS error: unexpected close while %s (%s)",
  381. doing, ssl_state_to_string(tls->ssl->state));
  382. tor_error = TOR_TLS_ERROR_IO;
  383. } else {
  384. int e = tor_socket_errno(tls->socket);
  385. log(severity, LD_NET,
  386. "TLS error: <syscall error while %s> (errno=%d: %s; state=%s)",
  387. doing, e, tor_socket_strerror(e),
  388. ssl_state_to_string(tls->ssl->state));
  389. tor_error = tor_errno_to_tls_error(e);
  390. }
  391. tls_log_errors(tls, severity, domain, doing);
  392. return tor_error;
  393. case SSL_ERROR_ZERO_RETURN:
  394. if (extra&CATCH_ZERO)
  395. return _TOR_TLS_ZERORETURN;
  396. log(severity, LD_NET, "TLS connection closed while %s in state %s",
  397. doing, ssl_state_to_string(tls->ssl->state));
  398. tls_log_errors(tls, severity, domain, doing);
  399. return TOR_TLS_CLOSE;
  400. default:
  401. tls_log_errors(tls, severity, domain, doing);
  402. return TOR_TLS_ERROR_MISC;
  403. }
  404. }
  405. /** Initialize OpenSSL, unless it has already been initialized.
  406. */
  407. static void
  408. tor_tls_init(void)
  409. {
  410. if (!tls_library_is_initialized) {
  411. long version;
  412. SSL_library_init();
  413. SSL_load_error_strings();
  414. version = SSLeay();
  415. /* OpenSSL 0.9.8l introduced SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION
  416. * here, but without thinking too hard about it: it turns out that the
  417. * flag in question needed to be set at the last minute, and that it
  418. * conflicted with an existing flag number that had already been added
  419. * in the OpenSSL 1.0.0 betas. OpenSSL 0.9.8m thoughtfully replaced
  420. * the flag with an option and (it seems) broke anything that used
  421. * SSL3_FLAGS_* for the purpose. So we need to know how to do both,
  422. * and we mustn't use the SSL3_FLAGS option with anything besides
  423. * OpenSSL 0.9.8l.
  424. *
  425. * No, we can't just set flag 0x0010 everywhere. It breaks Tor with
  426. * OpenSSL 1.0.0beta3 and later. On the other hand, we might be able to
  427. * set option 0x00040000L everywhere.
  428. *
  429. * No, we can't simply detect whether the flag or the option is present
  430. * in the headers at build-time: some vendors (notably Apple) like to
  431. * leave their headers out of sync with their libraries.
  432. *
  433. * Yes, it _is_ almost as if the OpenSSL developers decided that no
  434. * program should be allowed to use renegotiation unless it first passed
  435. * a test of intelligence and determination.
  436. */
  437. if (version >= 0x009080c0L && version < 0x009080d0L) {
  438. log_notice(LD_GENERAL, "OpenSSL %s looks like version 0.9.8l; "
  439. "I will try SSL3_FLAGS to enable renegotation.",
  440. SSLeay_version(SSLEAY_VERSION));
  441. use_unsafe_renegotiation_flag = 1;
  442. use_unsafe_renegotiation_op = 1;
  443. } else if (version >= 0x009080d0L) {
  444. log_notice(LD_GENERAL, "OpenSSL %s looks like version 0.9.8m or later; "
  445. "I will try SSL_OP to enable renegotiation",
  446. SSLeay_version(SSLEAY_VERSION));
  447. use_unsafe_renegotiation_op = 1;
  448. } else if (version < 0x009080c0L) {
  449. log_notice(LD_GENERAL, "OpenSSL %s [%lx] looks like it's older than "
  450. "0.9.8l, but some vendors have backported 0.9.8l's "
  451. "renegotiation code to earlier versions, and some have "
  452. "backported the code from 0.9.8m or 0.9.8n. I'll set both "
  453. "SSL3_FLAGS and SSL_OP just to be safe.",
  454. SSLeay_version(SSLEAY_VERSION), version);
  455. use_unsafe_renegotiation_flag = 1;
  456. use_unsafe_renegotiation_op = 1;
  457. } else {
  458. log_info(LD_GENERAL, "OpenSSL %s has version %lx",
  459. SSLeay_version(SSLEAY_VERSION), version);
  460. }
  461. tor_tls_allocate_tor_tls_object_ex_data_index();
  462. tls_library_is_initialized = 1;
  463. }
  464. }
  465. /** Free all global TLS structures. */
  466. void
  467. tor_tls_free_all(void)
  468. {
  469. if (server_tls_context) {
  470. tor_tls_context_t *ctx = server_tls_context;
  471. server_tls_context = NULL;
  472. tor_tls_context_decref(ctx);
  473. }
  474. if (client_tls_context) {
  475. tor_tls_context_t *ctx = client_tls_context;
  476. client_tls_context = NULL;
  477. tor_tls_context_decref(ctx);
  478. }
  479. #ifdef V2_HANDSHAKE_CLIENT
  480. if (CLIENT_CIPHER_DUMMIES)
  481. tor_free(CLIENT_CIPHER_DUMMIES);
  482. if (CLIENT_CIPHER_STACK)
  483. sk_SSL_CIPHER_free(CLIENT_CIPHER_STACK);
  484. #endif
  485. }
  486. /** We need to give OpenSSL a callback to verify certificates. This is
  487. * it: We always accept peer certs and complete the handshake. We
  488. * don't validate them until later.
  489. */
  490. static int
  491. always_accept_verify_cb(int preverify_ok,
  492. X509_STORE_CTX *x509_ctx)
  493. {
  494. (void) preverify_ok;
  495. (void) x509_ctx;
  496. return 1;
  497. }
  498. /** Return a newly allocated X509 name with commonName <b>cname</b>. */
  499. static X509_NAME *
  500. tor_x509_name_new(const char *cname)
  501. {
  502. int nid;
  503. X509_NAME *name;
  504. if (!(name = X509_NAME_new()))
  505. return NULL;
  506. if ((nid = OBJ_txt2nid("commonName")) == NID_undef) goto error;
  507. if (!(X509_NAME_add_entry_by_NID(name, nid, MBSTRING_ASC,
  508. (unsigned char*)cname, -1, -1, 0)))
  509. goto error;
  510. return name;
  511. error:
  512. X509_NAME_free(name);
  513. return NULL;
  514. }
  515. /** Generate and sign an X509 certificate with the public key <b>rsa</b>,
  516. * signed by the private key <b>rsa_sign</b>. The commonName of the
  517. * certificate will be <b>cname</b>; the commonName of the issuer will be
  518. * <b>cname_sign</b>. The cert will be valid for <b>cert_lifetime</b> seconds
  519. * starting from now. Return a certificate on success, NULL on
  520. * failure.
  521. */
  522. static X509 *
  523. tor_tls_create_certificate(crypto_pk_env_t *rsa,
  524. crypto_pk_env_t *rsa_sign,
  525. const char *cname,
  526. const char *cname_sign,
  527. unsigned int cert_lifetime)
  528. {
  529. time_t start_time, end_time;
  530. EVP_PKEY *sign_pkey = NULL, *pkey=NULL;
  531. X509 *x509 = NULL;
  532. X509_NAME *name = NULL, *name_issuer=NULL;
  533. tor_tls_init();
  534. start_time = time(NULL);
  535. tor_assert(rsa);
  536. tor_assert(cname);
  537. tor_assert(rsa_sign);
  538. tor_assert(cname_sign);
  539. if (!(sign_pkey = _crypto_pk_env_get_evp_pkey(rsa_sign,1)))
  540. goto error;
  541. if (!(pkey = _crypto_pk_env_get_evp_pkey(rsa,0)))
  542. goto error;
  543. if (!(x509 = X509_new()))
  544. goto error;
  545. if (!(X509_set_version(x509, 2)))
  546. goto error;
  547. if (!(ASN1_INTEGER_set(X509_get_serialNumber(x509), (long)start_time)))
  548. goto error;
  549. if (!(name = tor_x509_name_new(cname)))
  550. goto error;
  551. if (!(X509_set_subject_name(x509, name)))
  552. goto error;
  553. if (!(name_issuer = tor_x509_name_new(cname_sign)))
  554. goto error;
  555. if (!(X509_set_issuer_name(x509, name_issuer)))
  556. goto error;
  557. if (!X509_time_adj(X509_get_notBefore(x509),0,&start_time))
  558. goto error;
  559. end_time = start_time + cert_lifetime;
  560. if (!X509_time_adj(X509_get_notAfter(x509),0,&end_time))
  561. goto error;
  562. if (!X509_set_pubkey(x509, pkey))
  563. goto error;
  564. if (!X509_sign(x509, sign_pkey, EVP_sha1()))
  565. goto error;
  566. goto done;
  567. error:
  568. if (x509) {
  569. X509_free(x509);
  570. x509 = NULL;
  571. }
  572. done:
  573. tls_log_errors(NULL, LOG_WARN, LD_NET, "generating certificate");
  574. if (sign_pkey)
  575. EVP_PKEY_free(sign_pkey);
  576. if (pkey)
  577. EVP_PKEY_free(pkey);
  578. if (name)
  579. X509_NAME_free(name);
  580. if (name_issuer)
  581. X509_NAME_free(name_issuer);
  582. return x509;
  583. }
  584. /** List of ciphers that servers should select from.*/
  585. #define SERVER_CIPHER_LIST \
  586. (TLS1_TXT_DHE_RSA_WITH_AES_256_SHA ":" \
  587. TLS1_TXT_DHE_RSA_WITH_AES_128_SHA ":" \
  588. SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
  589. /* Note: to set up your own private testing network with link crypto
  590. * disabled, set your Tors' cipher list to
  591. * (SSL3_TXT_RSA_NULL_SHA). If you do this, you won't be able to communicate
  592. * with any of the "real" Tors, though. */
  593. #ifdef V2_HANDSHAKE_CLIENT
  594. #define CIPHER(id, name) name ":"
  595. #define XCIPHER(id, name)
  596. /** List of ciphers that clients should advertise, omitting items that
  597. * our OpenSSL doesn't know about. */
  598. static const char CLIENT_CIPHER_LIST[] =
  599. #include "./ciphers.inc"
  600. ;
  601. #undef CIPHER
  602. #undef XCIPHER
  603. /** Holds a cipher that we want to advertise, and its 2-byte ID. */
  604. typedef struct cipher_info_t { unsigned id; const char *name; } cipher_info_t;
  605. /** A list of all the ciphers that clients should advertise, including items
  606. * that OpenSSL might not know about. */
  607. static const cipher_info_t CLIENT_CIPHER_INFO_LIST[] = {
  608. #define CIPHER(id, name) { id, name },
  609. #define XCIPHER(id, name) { id, #name },
  610. #include "./ciphers.inc"
  611. #undef CIPHER
  612. #undef XCIPHER
  613. };
  614. /** The length of CLIENT_CIPHER_INFO_LIST and CLIENT_CIPHER_DUMMIES. */
  615. static const int N_CLIENT_CIPHERS =
  616. sizeof(CLIENT_CIPHER_INFO_LIST)/sizeof(CLIENT_CIPHER_INFO_LIST[0]);
  617. #endif
  618. #ifndef V2_HANDSHAKE_CLIENT
  619. #undef CLIENT_CIPHER_LIST
  620. #define CLIENT_CIPHER_LIST (TLS1_TXT_DHE_RSA_WITH_AES_128_SHA ":" \
  621. SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA)
  622. #endif
  623. /** Free all storage held in <b>cert</b> */
  624. void
  625. tor_cert_free(tor_cert_t *cert)
  626. {
  627. if (! cert)
  628. return;
  629. if (cert->cert)
  630. X509_free(cert->cert);
  631. tor_free(cert->encoded);
  632. memset(cert, 0x03, sizeof(cert));
  633. tor_free(cert);
  634. }
  635. /**
  636. * Allocate a new tor_cert_t to hold the certificate "x509_cert".
  637. *
  638. * Steals a reference to x509_cert.
  639. */
  640. static tor_cert_t *
  641. tor_cert_new(X509 *x509_cert)
  642. {
  643. tor_cert_t *cert;
  644. EVP_PKEY *pkey;
  645. RSA *rsa;
  646. int length, length2;
  647. unsigned char *cp;
  648. if (!x509_cert)
  649. return NULL;
  650. length = i2d_X509(x509_cert, NULL);
  651. cert = tor_malloc_zero(sizeof(tor_cert_t));
  652. if (length <= 0) {
  653. tor_free(cert);
  654. log_err(LD_CRYPTO, "Couldn't get length of encoded x509 certificate");
  655. X509_free(x509_cert);
  656. return NULL;
  657. }
  658. cert->encoded_len = (size_t) length;
  659. cp = cert->encoded = tor_malloc(length);
  660. length2 = i2d_X509(x509_cert, &cp);
  661. tor_assert(length2 == length);
  662. cert->cert = x509_cert;
  663. crypto_digest_all(&cert->cert_digests,
  664. (char*)cert->encoded, cert->encoded_len);
  665. if ((pkey = X509_get_pubkey(x509_cert)) &&
  666. (rsa = EVP_PKEY_get1_RSA(pkey))) {
  667. crypto_pk_env_t *pk = _crypto_new_pk_env_rsa(rsa);
  668. crypto_pk_get_all_digests(pk, &cert->pkey_digests);
  669. cert->pkey_digests_set = 1;
  670. crypto_free_pk_env(pk);
  671. EVP_PKEY_free(pkey);
  672. }
  673. return cert;
  674. }
  675. /** Read a DER-encoded X509 cert, of length exactly <b>certificate_len</b>,
  676. * from a <b>certificate</b>. Return a newly allocated tor_cert_t on success
  677. * and NULL on failure. */
  678. tor_cert_t *
  679. tor_cert_decode(const uint8_t *certificate, size_t certificate_len)
  680. {
  681. X509 *x509;
  682. const unsigned char *cp = (const unsigned char *)certificate;
  683. tor_cert_t *newcert;
  684. tor_assert(certificate);
  685. if (certificate_len > INT_MAX)
  686. return NULL;
  687. #if OPENSSL_VERSION_NUMBER < 0x00908000l
  688. /* This ifdef suppresses a type warning. Take out this case once everybody
  689. * is using OpenSSL 0.9.8 or later. */
  690. x509 = d2i_X509(NULL, (unsigned char**)&cp, (int)certificate_len);
  691. #else
  692. x509 = d2i_X509(NULL, &cp, (int)certificate_len);
  693. #endif
  694. if (!x509)
  695. return NULL; /* Couldn't decode */
  696. if (cp - certificate != (int)certificate_len) {
  697. X509_free(x509);
  698. return NULL; /* Didn't use all the bytes */
  699. }
  700. newcert = tor_cert_new(x509);
  701. if (!newcert) {
  702. return NULL;
  703. }
  704. if (newcert->encoded_len != certificate_len ||
  705. fast_memneq(newcert->encoded, certificate, certificate_len)) {
  706. /* Cert wasn't in DER */
  707. tor_cert_free(newcert);
  708. return NULL;
  709. }
  710. return newcert;
  711. }
  712. /** Set *<b>encoded_out</b> and *<b>size_out/b> to <b>cert</b>'s encoded DER
  713. * representation and length, respectively. */
  714. void
  715. tor_cert_get_der(const tor_cert_t *cert,
  716. const uint8_t **encoded_out, size_t *size_out)
  717. {
  718. tor_assert(cert);
  719. tor_assert(encoded_out);
  720. tor_assert(size_out);
  721. *encoded_out = cert->encoded;
  722. *size_out = cert->encoded_len;
  723. }
  724. /** Return a set of digests for the public key in <b>cert</b>, or NULL if this
  725. * cert's public key is not one we know how to take the digest of. */
  726. const digests_t *
  727. tor_cert_get_id_digests(const tor_cert_t *cert)
  728. {
  729. if (cert->pkey_digests_set)
  730. return &cert->pkey_digests;
  731. else
  732. return NULL;
  733. }
  734. /** Return a set of digests for the public key in <b>cert</b>. */
  735. const digests_t *
  736. tor_cert_get_cert_digests(const tor_cert_t *cert)
  737. {
  738. return &cert->cert_digests;
  739. }
  740. /** Remove a reference to <b>ctx</b>, and free it if it has no more
  741. * references. */
  742. static void
  743. tor_tls_context_decref(tor_tls_context_t *ctx)
  744. {
  745. tor_assert(ctx);
  746. if (--ctx->refcnt == 0) {
  747. SSL_CTX_free(ctx->ctx);
  748. tor_cert_free(ctx->my_link_cert);
  749. tor_cert_free(ctx->my_id_cert);
  750. tor_cert_free(ctx->my_auth_cert);
  751. crypto_free_pk_env(ctx->link_key);
  752. crypto_free_pk_env(ctx->auth_key);
  753. tor_free(ctx);
  754. }
  755. }
  756. /** Set *<b>link_cert_out</b> and *<b>id_cert_out</b> to the link certificate
  757. * and ID certificate that we're currently using for our V3 in-protocol
  758. * handshake's certificate chain. If <b>server</b> is true, provide the certs
  759. * that we use in server mode; otherwise, provide the certs that we use in
  760. * client mode. */
  761. int
  762. tor_tls_get_my_certs(int server,
  763. const tor_cert_t **link_cert_out,
  764. const tor_cert_t **id_cert_out)
  765. {
  766. tor_tls_context_t *ctx = server ? server_tls_context : client_tls_context;
  767. if (! ctx)
  768. return -1;
  769. if (link_cert_out)
  770. *link_cert_out = server ? ctx->my_link_cert : ctx->my_auth_cert;
  771. if (id_cert_out)
  772. *id_cert_out = ctx->my_id_cert;
  773. return 0;
  774. }
  775. /**
  776. * Return the authentication key that we use to authenticate ourselves as a
  777. * client in the V3 in-protocol handshake.
  778. */
  779. crypto_pk_env_t *
  780. tor_tls_get_my_client_auth_key(void)
  781. {
  782. if (! client_tls_context)
  783. return NULL;
  784. return client_tls_context->auth_key;
  785. }
  786. /**
  787. * Return the public key that a cetificate certifies. Return NULL if the
  788. * cert's key is not RSA.
  789. */
  790. crypto_pk_env_t *
  791. tor_tls_cert_get_key(tor_cert_t *cert)
  792. {
  793. crypto_pk_env_t *result = NULL;
  794. EVP_PKEY *pkey = X509_get_pubkey(cert->cert);
  795. RSA *rsa;
  796. if (!pkey)
  797. return NULL;
  798. rsa = EVP_PKEY_get1_RSA(pkey);
  799. if (!rsa) {
  800. EVP_PKEY_free(pkey);
  801. return NULL;
  802. }
  803. result = _crypto_new_pk_env_rsa(rsa);
  804. EVP_PKEY_free(pkey);
  805. return result;
  806. }
  807. /** Return true iff <b>a</b> and <b>b</b> represent the same public key. */
  808. static int
  809. pkey_eq(EVP_PKEY *a, EVP_PKEY *b)
  810. {
  811. /* We'd like to do this, but openssl 0.9.7 doesn't have it:
  812. return EVP_PKEY_cmp(a,b) == 1;
  813. */
  814. unsigned char *a_enc=NULL, *b_enc=NULL, *a_ptr, *b_ptr;
  815. int a_len1, b_len1, a_len2, b_len2, result;
  816. a_len1 = i2d_PublicKey(a, NULL);
  817. b_len1 = i2d_PublicKey(b, NULL);
  818. if (a_len1 != b_len1)
  819. return 0;
  820. a_ptr = a_enc = tor_malloc(a_len1);
  821. b_ptr = b_enc = tor_malloc(b_len1);
  822. a_len2 = i2d_PublicKey(a, &a_ptr);
  823. b_len2 = i2d_PublicKey(b, &b_ptr);
  824. tor_assert(a_len2 == a_len1);
  825. tor_assert(b_len2 == b_len1);
  826. result = tor_memeq(a_enc, b_enc, a_len1);
  827. tor_free(a_enc);
  828. tor_free(b_enc);
  829. return result;
  830. }
  831. /** Return true iff the other side of <b>tls</b> has authenticated to us, and
  832. * the key certified in <b>cert</b> is the same as the key they used to do it.
  833. */
  834. int
  835. tor_tls_cert_matches_key(const tor_tls_t *tls, const tor_cert_t *cert)
  836. {
  837. X509 *peercert = SSL_get_peer_certificate(tls->ssl);
  838. EVP_PKEY *link_key = NULL, *cert_key = NULL;
  839. int result;
  840. if (!peercert)
  841. return 0;
  842. link_key = X509_get_pubkey(peercert);
  843. cert_key = X509_get_pubkey(cert->cert);
  844. result = link_key && cert_key && pkey_eq(cert_key, link_key);
  845. X509_free(peercert);
  846. if (link_key)
  847. EVP_PKEY_free(link_key);
  848. if (cert_key)
  849. EVP_PKEY_free(cert_key);
  850. return result;
  851. }
  852. /** Check whether <b>cert</b> is well-formed, currently live, and correctly
  853. * signed by the public key in <b>signing_cert</b>. If <b>check_rsa_1024</b>,
  854. * make sure that it has an RSA key with 1024 bits; otherwise, just check that
  855. * the key is long enough. Return 1 if the cert is good, and 0 if it's bad or
  856. * we couldn't check it. */
  857. int
  858. tor_tls_cert_is_valid(const tor_cert_t *cert,
  859. const tor_cert_t *signing_cert,
  860. int check_rsa_1024)
  861. {
  862. EVP_PKEY *cert_key;
  863. EVP_PKEY *signing_key = X509_get_pubkey(signing_cert->cert);
  864. int r, key_ok = 0;
  865. if (!signing_key)
  866. return 0;
  867. r = X509_verify(cert->cert, signing_key);
  868. EVP_PKEY_free(signing_key);
  869. if (r <= 0)
  870. return 0;
  871. /* okay, the signature checked out right. Now let's check the check the
  872. * lifetime. */
  873. /*XXXX tolerance might be iffy here */
  874. if (check_cert_lifetime_internal(cert->cert, 60*60) < 0)
  875. return 0;
  876. cert_key = X509_get_pubkey(cert->cert);
  877. if (check_rsa_1024 && cert_key) {
  878. RSA *rsa = EVP_PKEY_get1_RSA(cert_key);
  879. if (rsa && BN_num_bits(rsa->n) == 1024)
  880. key_ok = 1;
  881. if (rsa)
  882. RSA_free(rsa);
  883. } else if (cert_key) {
  884. int min_bits = 1024;
  885. #ifdef EVP_PKEY_EC
  886. if (EVP_PKEY_type(cert_key->type) == EVP_PKEY_EC)
  887. min_bits = 128;
  888. #endif
  889. if (EVP_PKEY_bits(cert_key) >= min_bits)
  890. key_ok = 1;
  891. }
  892. EVP_PKEY_free(cert_key);
  893. if (!key_ok)
  894. return 0;
  895. /* XXXX compare DNs or anything? */
  896. return 1;
  897. }
  898. /** Increase the reference count of <b>ctx</b>. */
  899. static void
  900. tor_tls_context_incref(tor_tls_context_t *ctx)
  901. {
  902. ++ctx->refcnt;
  903. }
  904. /** Create new global client and server TLS contexts.
  905. *
  906. * If <b>server_identity</b> is NULL, this will not generate a server
  907. * TLS context. If <b>is_public_server</b> is non-zero, this will use
  908. * the same TLS context for incoming and outgoing connections, and
  909. * ignore <b>client_identity</b>. */
  910. int
  911. tor_tls_context_init(int is_public_server,
  912. crypto_pk_env_t *client_identity,
  913. crypto_pk_env_t *server_identity,
  914. unsigned int key_lifetime)
  915. {
  916. int rv1 = 0;
  917. int rv2 = 0;
  918. if (is_public_server) {
  919. tor_tls_context_t *new_ctx;
  920. tor_tls_context_t *old_ctx;
  921. tor_assert(server_identity != NULL);
  922. rv1 = tor_tls_context_init_one(&server_tls_context,
  923. server_identity,
  924. key_lifetime);
  925. if (rv1 >= 0) {
  926. new_ctx = server_tls_context;
  927. tor_tls_context_incref(new_ctx);
  928. old_ctx = client_tls_context;
  929. client_tls_context = new_ctx;
  930. if (old_ctx != NULL) {
  931. tor_tls_context_decref(old_ctx);
  932. }
  933. }
  934. } else {
  935. if (server_identity != NULL) {
  936. rv1 = tor_tls_context_init_one(&server_tls_context,
  937. server_identity,
  938. key_lifetime);
  939. } else {
  940. tor_tls_context_t *old_ctx = server_tls_context;
  941. server_tls_context = NULL;
  942. if (old_ctx != NULL) {
  943. tor_tls_context_decref(old_ctx);
  944. }
  945. }
  946. rv2 = tor_tls_context_init_one(&client_tls_context,
  947. client_identity,
  948. key_lifetime);
  949. }
  950. return MIN(rv1, rv2);
  951. }
  952. /** Create a new global TLS context.
  953. *
  954. * You can call this function multiple times. Each time you call it,
  955. * it generates new certificates; all new connections will use
  956. * the new SSL context.
  957. */
  958. static int
  959. tor_tls_context_init_one(tor_tls_context_t **ppcontext,
  960. crypto_pk_env_t *identity,
  961. unsigned int key_lifetime)
  962. {
  963. tor_tls_context_t *new_ctx = tor_tls_context_new(identity,
  964. key_lifetime);
  965. tor_tls_context_t *old_ctx = *ppcontext;
  966. if (new_ctx != NULL) {
  967. *ppcontext = new_ctx;
  968. /* Free the old context if one existed. */
  969. if (old_ctx != NULL) {
  970. /* This is safe even if there are open connections: we reference-
  971. * count tor_tls_context_t objects. */
  972. tor_tls_context_decref(old_ctx);
  973. }
  974. }
  975. return ((new_ctx != NULL) ? 0 : -1);
  976. }
  977. /** Create a new TLS context for use with Tor TLS handshakes.
  978. * <b>identity</b> should be set to the identity key used to sign the
  979. * certificate.
  980. */
  981. static tor_tls_context_t *
  982. tor_tls_context_new(crypto_pk_env_t *identity, unsigned int key_lifetime)
  983. {
  984. crypto_pk_env_t *rsa = NULL, *rsa_auth = NULL;
  985. EVP_PKEY *pkey = NULL;
  986. tor_tls_context_t *result = NULL;
  987. X509 *cert = NULL, *idcert = NULL, *authcert = NULL;
  988. char *nickname = NULL, *nn2 = NULL;
  989. tor_tls_init();
  990. nickname = crypto_random_hostname(8, 20, "www.", ".net");
  991. #ifdef DISABLE_V3_LINKPROTO_SERVERSIDE
  992. nn2 = crypto_random_hostname(8, 20, "www.", ".net");
  993. #else
  994. nn2 = crypto_random_hostname(8, 20, "www.", ".com");
  995. #endif
  996. /* Generate short-term RSA key for use with TLS. */
  997. if (!(rsa = crypto_new_pk_env()))
  998. goto error;
  999. if (crypto_pk_generate_key(rsa)<0)
  1000. goto error;
  1001. /* Generate short-term RSA key for use in the in-protocol ("v3")
  1002. * authentication handshake. */
  1003. if (!(rsa_auth = crypto_new_pk_env()))
  1004. goto error;
  1005. if (crypto_pk_generate_key(rsa_auth)<0)
  1006. goto error;
  1007. /* Create a link certificate signed by identity key. */
  1008. cert = tor_tls_create_certificate(rsa, identity, nickname, nn2,
  1009. key_lifetime);
  1010. /* Create self-signed certificate for identity key. */
  1011. idcert = tor_tls_create_certificate(identity, identity, nn2, nn2,
  1012. IDENTITY_CERT_LIFETIME);
  1013. /* Create an authentication certificate signed by identity key. */
  1014. authcert = tor_tls_create_certificate(rsa_auth, identity, nickname, nn2,
  1015. key_lifetime);
  1016. if (!cert || !idcert || !authcert) {
  1017. log(LOG_WARN, LD_CRYPTO, "Error creating certificate");
  1018. goto error;
  1019. }
  1020. result = tor_malloc_zero(sizeof(tor_tls_context_t));
  1021. result->refcnt = 1;
  1022. result->my_link_cert = tor_cert_new(X509_dup(cert));
  1023. result->my_id_cert = tor_cert_new(X509_dup(idcert));
  1024. result->my_auth_cert = tor_cert_new(X509_dup(authcert));
  1025. if (!result->my_link_cert || !result->my_id_cert || !result->my_auth_cert)
  1026. goto error;
  1027. result->link_key = crypto_pk_dup_key(rsa);
  1028. result->auth_key = crypto_pk_dup_key(rsa_auth);
  1029. #ifdef EVERYONE_HAS_AES
  1030. /* Tell OpenSSL to only use TLS1 */
  1031. if (!(result->ctx = SSL_CTX_new(TLSv1_method())))
  1032. goto error;
  1033. #else
  1034. /* Tell OpenSSL to use SSL3 or TLS1 but not SSL2. */
  1035. if (!(result->ctx = SSL_CTX_new(SSLv23_method())))
  1036. goto error;
  1037. SSL_CTX_set_options(result->ctx, SSL_OP_NO_SSLv2);
  1038. #endif
  1039. SSL_CTX_set_options(result->ctx, SSL_OP_SINGLE_DH_USE);
  1040. #ifdef SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION
  1041. SSL_CTX_set_options(result->ctx,
  1042. SSL_OP_NO_SESSION_RESUMPTION_ON_RENEGOTIATION);
  1043. #endif
  1044. /* Yes, we know what we are doing here. No, we do not treat a renegotiation
  1045. * as authenticating any earlier-received data.
  1046. */
  1047. if (use_unsafe_renegotiation_op) {
  1048. SSL_CTX_set_options(result->ctx,
  1049. SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION);
  1050. }
  1051. /* Don't actually allow compression; it uses ram and time, but the data
  1052. * we transmit is all encrypted anyway. */
  1053. if (result->ctx->comp_methods)
  1054. result->ctx->comp_methods = NULL;
  1055. #ifdef SSL_MODE_RELEASE_BUFFERS
  1056. SSL_CTX_set_mode(result->ctx, SSL_MODE_RELEASE_BUFFERS);
  1057. #endif
  1058. if (cert && !SSL_CTX_use_certificate(result->ctx,cert))
  1059. goto error;
  1060. X509_free(cert); /* We just added a reference to cert. */
  1061. cert=NULL;
  1062. if (idcert) {
  1063. X509_STORE *s = SSL_CTX_get_cert_store(result->ctx);
  1064. tor_assert(s);
  1065. X509_STORE_add_cert(s, idcert);
  1066. X509_free(idcert); /* The context now owns the reference to idcert */
  1067. idcert = NULL;
  1068. }
  1069. SSL_CTX_set_session_cache_mode(result->ctx, SSL_SESS_CACHE_OFF);
  1070. tor_assert(rsa);
  1071. if (!(pkey = _crypto_pk_env_get_evp_pkey(rsa,1)))
  1072. goto error;
  1073. if (!SSL_CTX_use_PrivateKey(result->ctx, pkey))
  1074. goto error;
  1075. EVP_PKEY_free(pkey);
  1076. pkey = NULL;
  1077. if (!SSL_CTX_check_private_key(result->ctx))
  1078. goto error;
  1079. {
  1080. crypto_dh_env_t *dh = crypto_dh_new(DH_TYPE_TLS);
  1081. tor_assert(dh);
  1082. SSL_CTX_set_tmp_dh(result->ctx, _crypto_dh_env_get_dh(dh));
  1083. crypto_dh_free(dh);
  1084. }
  1085. SSL_CTX_set_verify(result->ctx, SSL_VERIFY_PEER,
  1086. always_accept_verify_cb);
  1087. /* let us realloc bufs that we're writing from */
  1088. SSL_CTX_set_mode(result->ctx, SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER);
  1089. if (rsa)
  1090. crypto_free_pk_env(rsa);
  1091. if (rsa_auth)
  1092. crypto_free_pk_env(rsa_auth);
  1093. X509_free(authcert);
  1094. tor_free(nickname);
  1095. tor_free(nn2);
  1096. return result;
  1097. error:
  1098. tls_log_errors(NULL, LOG_WARN, LD_NET, "creating TLS context");
  1099. tor_free(nickname);
  1100. tor_free(nn2);
  1101. if (pkey)
  1102. EVP_PKEY_free(pkey);
  1103. if (rsa)
  1104. crypto_free_pk_env(rsa);
  1105. if (rsa_auth)
  1106. crypto_free_pk_env(rsa_auth);
  1107. if (result)
  1108. tor_tls_context_decref(result);
  1109. if (cert)
  1110. X509_free(cert);
  1111. if (idcert)
  1112. X509_free(idcert);
  1113. if (authcert)
  1114. X509_free(authcert);
  1115. return NULL;
  1116. }
  1117. #ifdef V2_HANDSHAKE_SERVER
  1118. /** Return true iff the cipher list suggested by the client for <b>ssl</b> is
  1119. * a list that indicates that the client knows how to do the v2 TLS connection
  1120. * handshake. */
  1121. static int
  1122. tor_tls_client_is_using_v2_ciphers(const SSL *ssl, const char *address)
  1123. {
  1124. int i;
  1125. SSL_SESSION *session;
  1126. /* If we reached this point, we just got a client hello. See if there is
  1127. * a cipher list. */
  1128. if (!(session = SSL_get_session((SSL *)ssl))) {
  1129. log_info(LD_NET, "No session on TLS?");
  1130. return 0;
  1131. }
  1132. if (!session->ciphers) {
  1133. log_info(LD_NET, "No ciphers on session");
  1134. return 0;
  1135. }
  1136. /* Now we need to see if there are any ciphers whose presence means we're
  1137. * dealing with an updated Tor. */
  1138. for (i = 0; i < sk_SSL_CIPHER_num(session->ciphers); ++i) {
  1139. SSL_CIPHER *cipher = sk_SSL_CIPHER_value(session->ciphers, i);
  1140. const char *ciphername = SSL_CIPHER_get_name(cipher);
  1141. if (strcmp(ciphername, TLS1_TXT_DHE_RSA_WITH_AES_128_SHA) &&
  1142. strcmp(ciphername, TLS1_TXT_DHE_RSA_WITH_AES_256_SHA) &&
  1143. strcmp(ciphername, SSL3_TXT_EDH_RSA_DES_192_CBC3_SHA) &&
  1144. strcmp(ciphername, "(NONE)")) {
  1145. log_debug(LD_NET, "Got a non-version-1 cipher called '%s'", ciphername);
  1146. // return 1;
  1147. goto dump_list;
  1148. }
  1149. }
  1150. return 0;
  1151. dump_list:
  1152. {
  1153. smartlist_t *elts = smartlist_create();
  1154. char *s;
  1155. for (i = 0; i < sk_SSL_CIPHER_num(session->ciphers); ++i) {
  1156. SSL_CIPHER *cipher = sk_SSL_CIPHER_value(session->ciphers, i);
  1157. const char *ciphername = SSL_CIPHER_get_name(cipher);
  1158. smartlist_add(elts, (char*)ciphername);
  1159. }
  1160. s = smartlist_join_strings(elts, ":", 0, NULL);
  1161. log_debug(LD_NET, "Got a non-version-1 cipher list from %s. It is: '%s'",
  1162. address, s);
  1163. tor_free(s);
  1164. smartlist_free(elts);
  1165. }
  1166. return 1;
  1167. }
  1168. /** We got an SSL ClientHello message. This might mean that the
  1169. * client wants to initiate a renegotiation and appropriate actions
  1170. * must be taken. */
  1171. static void
  1172. tor_tls_got_client_hello(tor_tls_t *tls)
  1173. {
  1174. if (tls->server_handshake_count < 3)
  1175. ++tls->server_handshake_count;
  1176. if (tls->server_handshake_count == 2) {
  1177. if (!tls->negotiated_callback) {
  1178. log_warn(LD_BUG, "Got a renegotiation request but we don't"
  1179. " have a renegotiation callback set!");
  1180. }
  1181. tls->got_renegotiate = 1;
  1182. } else if (tls->server_handshake_count > 2) {
  1183. /* We got more than one renegotiation requests. The Tor protocol
  1184. needs just one renegotiation; more than that probably means
  1185. They are trying to DoS us and we have to stop them. We can't
  1186. close their connection from in here since it's an OpenSSL
  1187. callback, so we set a libevent timer that triggers in the next
  1188. event loop and closes the connection. */
  1189. struct timeval zero_seconds_timer = {0,0};
  1190. if (tor_event_base_once(tls->excess_renegotiations_callback,
  1191. tls->callback_arg, &zero_seconds_timer) < 0) {
  1192. log_warn(LD_GENERAL, "Didn't manage to set a renegotiation limiting callback.");
  1193. }
  1194. }
  1195. /* Now check the cipher list. */
  1196. if (tor_tls_client_is_using_v2_ciphers(tls->ssl, ADDR(tls))) {
  1197. /*XXXX_TLS keep this from happening more than once! */
  1198. /* Yes, we're casting away the const from ssl. This is very naughty of us.
  1199. * Let's hope openssl doesn't notice! */
  1200. /* Set SSL_MODE_NO_AUTO_CHAIN to keep from sending back any extra certs. */
  1201. SSL_set_mode((SSL*) tls->ssl, SSL_MODE_NO_AUTO_CHAIN);
  1202. /* Don't send a hello request. */
  1203. SSL_set_verify((SSL*) tls->ssl, SSL_VERIFY_NONE, NULL);
  1204. if (tls) {
  1205. tls->wasV2Handshake = 1;
  1206. #ifdef USE_BUFFEREVENTS
  1207. if (use_unsafe_renegotiation_flag)
  1208. tls->ssl->s3->flags |= SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
  1209. #endif
  1210. } else {
  1211. log_warn(LD_BUG, "Couldn't look up the tls for an SSL*. How odd!");
  1212. }
  1213. }
  1214. }
  1215. #endif
  1216. /** This is a callback function for SSL_set_info_callback() and it
  1217. * will be called in every SSL state change.
  1218. * It logs the SSL state change, and executes any actions that must be
  1219. * taken. */
  1220. static void
  1221. tor_tls_state_changed_callback(const SSL *ssl, int type, int val)
  1222. {
  1223. log_debug(LD_HANDSHAKE, "SSL %p is now in state %s [type=%d,val=%d].",
  1224. ssl, ssl_state_to_string(ssl->state), type, val);
  1225. #ifdef V2_HANDSHAKE_SERVER
  1226. if (type == SSL_CB_ACCEPT_LOOP &&
  1227. ssl->state == SSL3_ST_SW_SRVR_HELLO_A) {
  1228. /* Call tor_tls_got_client_hello() for every SSL ClientHello we
  1229. receive. */
  1230. tor_tls_t *tls = tor_tls_get_by_ssl(ssl);
  1231. if (!tls) {
  1232. log_warn(LD_BUG, "Couldn't look up the tls for an SSL*. How odd!");
  1233. return;
  1234. }
  1235. tor_tls_got_client_hello(tls);
  1236. }
  1237. #endif
  1238. }
  1239. /** Replace *<b>ciphers</b> with a new list of SSL ciphersuites: specifically,
  1240. * a list designed to mimic a common web browser. Some of the ciphers in the
  1241. * list won't actually be implemented by OpenSSL: that's okay so long as the
  1242. * server doesn't select them, and the server won't select anything besides
  1243. * what's in SERVER_CIPHER_LIST.
  1244. *
  1245. * [If the server <b>does</b> select a bogus cipher, we won't crash or
  1246. * anything; we'll just fail later when we try to look up the cipher in
  1247. * ssl->cipher_list_by_id.]
  1248. */
  1249. static void
  1250. rectify_client_ciphers(STACK_OF(SSL_CIPHER) **ciphers)
  1251. {
  1252. #ifdef V2_HANDSHAKE_CLIENT
  1253. if (PREDICT_UNLIKELY(!CLIENT_CIPHER_STACK)) {
  1254. /* We need to set CLIENT_CIPHER_STACK to an array of the ciphers
  1255. * we want.*/
  1256. int i = 0, j = 0;
  1257. /* First, create a dummy SSL_CIPHER for every cipher. */
  1258. CLIENT_CIPHER_DUMMIES =
  1259. tor_malloc_zero(sizeof(SSL_CIPHER)*N_CLIENT_CIPHERS);
  1260. for (i=0; i < N_CLIENT_CIPHERS; ++i) {
  1261. CLIENT_CIPHER_DUMMIES[i].valid = 1;
  1262. CLIENT_CIPHER_DUMMIES[i].id = CLIENT_CIPHER_INFO_LIST[i].id | (3<<24);
  1263. CLIENT_CIPHER_DUMMIES[i].name = CLIENT_CIPHER_INFO_LIST[i].name;
  1264. }
  1265. CLIENT_CIPHER_STACK = sk_SSL_CIPHER_new_null();
  1266. tor_assert(CLIENT_CIPHER_STACK);
  1267. log_debug(LD_NET, "List was: %s", CLIENT_CIPHER_LIST);
  1268. for (j = 0; j < sk_SSL_CIPHER_num(*ciphers); ++j) {
  1269. SSL_CIPHER *cipher = sk_SSL_CIPHER_value(*ciphers, j);
  1270. log_debug(LD_NET, "Cipher %d: %lx %s", j, cipher->id, cipher->name);
  1271. }
  1272. /* Then copy as many ciphers as we can from the good list, inserting
  1273. * dummies as needed. */
  1274. j=0;
  1275. for (i = 0; i < N_CLIENT_CIPHERS; ) {
  1276. SSL_CIPHER *cipher = NULL;
  1277. if (j < sk_SSL_CIPHER_num(*ciphers))
  1278. cipher = sk_SSL_CIPHER_value(*ciphers, j);
  1279. if (cipher && ((cipher->id >> 24) & 0xff) != 3) {
  1280. log_debug(LD_NET, "Skipping v2 cipher %s", cipher->name);
  1281. ++j;
  1282. } else if (cipher &&
  1283. (cipher->id & 0xffff) == CLIENT_CIPHER_INFO_LIST[i].id) {
  1284. log_debug(LD_NET, "Found cipher %s", cipher->name);
  1285. sk_SSL_CIPHER_push(CLIENT_CIPHER_STACK, cipher);
  1286. ++j;
  1287. ++i;
  1288. } else {
  1289. log_debug(LD_NET, "Inserting fake %s", CLIENT_CIPHER_DUMMIES[i].name);
  1290. sk_SSL_CIPHER_push(CLIENT_CIPHER_STACK, &CLIENT_CIPHER_DUMMIES[i]);
  1291. ++i;
  1292. }
  1293. }
  1294. }
  1295. sk_SSL_CIPHER_free(*ciphers);
  1296. *ciphers = sk_SSL_CIPHER_dup(CLIENT_CIPHER_STACK);
  1297. tor_assert(*ciphers);
  1298. #else
  1299. (void)ciphers;
  1300. #endif
  1301. }
  1302. /** Create a new TLS object from a file descriptor, and a flag to
  1303. * determine whether it is functioning as a server.
  1304. */
  1305. tor_tls_t *
  1306. tor_tls_new(int sock, int isServer)
  1307. {
  1308. BIO *bio = NULL;
  1309. tor_tls_t *result = tor_malloc_zero(sizeof(tor_tls_t));
  1310. tor_tls_context_t *context = isServer ? server_tls_context :
  1311. client_tls_context;
  1312. result->magic = TOR_TLS_MAGIC;
  1313. tor_assert(context); /* make sure somebody made it first */
  1314. if (!(result->ssl = SSL_new(context->ctx))) {
  1315. tls_log_errors(NULL, LOG_WARN, LD_NET, "creating SSL object");
  1316. tor_free(result);
  1317. return NULL;
  1318. }
  1319. #ifdef SSL_set_tlsext_host_name
  1320. /* Browsers use the TLS hostname extension, so we should too. */
  1321. if (!isServer) {
  1322. char *fake_hostname = crypto_random_hostname(4,25, "www.",".com");
  1323. SSL_set_tlsext_host_name(result->ssl, fake_hostname);
  1324. tor_free(fake_hostname);
  1325. }
  1326. #endif
  1327. if (!SSL_set_cipher_list(result->ssl,
  1328. isServer ? SERVER_CIPHER_LIST : CLIENT_CIPHER_LIST)) {
  1329. tls_log_errors(NULL, LOG_WARN, LD_NET, "setting ciphers");
  1330. #ifdef SSL_set_tlsext_host_name
  1331. SSL_set_tlsext_host_name(result->ssl, NULL);
  1332. #endif
  1333. SSL_free(result->ssl);
  1334. tor_free(result);
  1335. return NULL;
  1336. }
  1337. if (!isServer)
  1338. rectify_client_ciphers(&result->ssl->cipher_list);
  1339. result->socket = sock;
  1340. bio = BIO_new_socket(sock, BIO_NOCLOSE);
  1341. if (! bio) {
  1342. tls_log_errors(NULL, LOG_WARN, LD_NET, "opening BIO");
  1343. #ifdef SSL_set_tlsext_host_name
  1344. SSL_set_tlsext_host_name(result->ssl, NULL);
  1345. #endif
  1346. SSL_free(result->ssl);
  1347. tor_free(result);
  1348. return NULL;
  1349. }
  1350. {
  1351. int set_worked =
  1352. SSL_set_ex_data(result->ssl, tor_tls_object_ex_data_index, result);
  1353. if (!set_worked) {
  1354. log_warn(LD_BUG,
  1355. "Couldn't set the tls for an SSL*; connection will fail");
  1356. }
  1357. }
  1358. SSL_set_bio(result->ssl, bio, bio);
  1359. tor_tls_context_incref(context);
  1360. result->context = context;
  1361. result->state = TOR_TLS_ST_HANDSHAKE;
  1362. result->isServer = isServer;
  1363. result->wantwrite_n = 0;
  1364. result->last_write_count = BIO_number_written(bio);
  1365. result->last_read_count = BIO_number_read(bio);
  1366. if (result->last_write_count || result->last_read_count) {
  1367. log_warn(LD_NET, "Newly created BIO has read count %lu, write count %lu",
  1368. result->last_read_count, result->last_write_count);
  1369. }
  1370. SSL_set_info_callback(result->ssl, tor_tls_state_changed_callback);
  1371. /* Not expected to get called. */
  1372. tls_log_errors(NULL, LOG_WARN, LD_NET, "creating tor_tls_t object");
  1373. return result;
  1374. }
  1375. /** Make future log messages about <b>tls</b> display the address
  1376. * <b>address</b>.
  1377. */
  1378. void
  1379. tor_tls_set_logged_address(tor_tls_t *tls, const char *address)
  1380. {
  1381. tor_assert(tls);
  1382. tor_free(tls->address);
  1383. tls->address = tor_strdup(address);
  1384. }
  1385. /** Set <b>cb</b> to be called with argument <b>arg</b> whenever
  1386. * <b>tls</b> next gets a client-side renegotiate in the middle of a
  1387. * read. Set <b>cb2</b> to be called with argument <b>arg</b> whenever
  1388. * <b>tls</b> gets excess renegotiation requests. Do not invoke this
  1389. * function until <em>after</em> initial handshaking is done!
  1390. */
  1391. void
  1392. tor_tls_set_renegotiate_callbacks(tor_tls_t *tls,
  1393. void (*cb)(tor_tls_t *, void *arg),
  1394. void (*cb2)(evutil_socket_t, short, void *),
  1395. void *arg)
  1396. {
  1397. tls->negotiated_callback = cb;
  1398. tls->excess_renegotiations_callback = cb2;
  1399. tls->callback_arg = arg;
  1400. tls->got_renegotiate = 0;
  1401. SSL_set_info_callback(tls->ssl, tor_tls_state_changed_callback);
  1402. }
  1403. /** If this version of openssl requires it, turn on renegotiation on
  1404. * <b>tls</b>.
  1405. */
  1406. void
  1407. tor_tls_unblock_renegotiation(tor_tls_t *tls)
  1408. {
  1409. /* Yes, we know what we are doing here. No, we do not treat a renegotiation
  1410. * as authenticating any earlier-received data. */
  1411. if (use_unsafe_renegotiation_flag) {
  1412. tls->ssl->s3->flags |= SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION;
  1413. }
  1414. if (use_unsafe_renegotiation_op) {
  1415. SSL_set_options(tls->ssl,
  1416. SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION);
  1417. }
  1418. }
  1419. void
  1420. tor_tls_assert_renegotiation_unblocked(tor_tls_t *tls)
  1421. {
  1422. if (use_unsafe_renegotiation_flag) {
  1423. tor_assert(0 != (tls->ssl->s3->flags &
  1424. SSL3_FLAGS_ALLOW_UNSAFE_LEGACY_RENEGOTIATION));
  1425. }
  1426. if (use_unsafe_renegotiation_op) {
  1427. long options = SSL_get_options(tls->ssl);
  1428. tor_assert(0 != (options & SSL_OP_ALLOW_UNSAFE_LEGACY_RENEGOTIATION));
  1429. }
  1430. }
  1431. /** Return whether this tls initiated the connect (client) or
  1432. * received it (server). */
  1433. int
  1434. tor_tls_is_server(tor_tls_t *tls)
  1435. {
  1436. tor_assert(tls);
  1437. return tls->isServer;
  1438. }
  1439. /** Release resources associated with a TLS object. Does not close the
  1440. * underlying file descriptor.
  1441. */
  1442. void
  1443. tor_tls_free(tor_tls_t *tls)
  1444. {
  1445. if (!tls)
  1446. return;
  1447. tor_assert(tls->ssl);
  1448. #ifdef SSL_set_tlsext_host_name
  1449. SSL_set_tlsext_host_name(tls->ssl, NULL);
  1450. #endif
  1451. SSL_free(tls->ssl);
  1452. tls->ssl = NULL;
  1453. tls->negotiated_callback = NULL;
  1454. tls->excess_renegotiations_callback = NULL;
  1455. if (tls->context)
  1456. tor_tls_context_decref(tls->context);
  1457. tor_free(tls->address);
  1458. tls->magic = 0x99999999;
  1459. tor_free(tls);
  1460. }
  1461. /** Underlying function for TLS reading. Reads up to <b>len</b>
  1462. * characters from <b>tls</b> into <b>cp</b>. On success, returns the
  1463. * number of characters read. On failure, returns TOR_TLS_ERROR,
  1464. * TOR_TLS_CLOSE, TOR_TLS_WANTREAD, or TOR_TLS_WANTWRITE.
  1465. */
  1466. int
  1467. tor_tls_read(tor_tls_t *tls, char *cp, size_t len)
  1468. {
  1469. int r, err;
  1470. tor_assert(tls);
  1471. tor_assert(tls->ssl);
  1472. tor_assert(tls->state == TOR_TLS_ST_OPEN);
  1473. tor_assert(len<INT_MAX);
  1474. r = SSL_read(tls->ssl, cp, (int)len);
  1475. if (r > 0) /* return the number of characters read */
  1476. return r;
  1477. /* If we got here, SSL_read() did not go as expected. */
  1478. err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading", LOG_DEBUG, LD_NET);
  1479. #ifdef V2_HANDSHAKE_SERVER
  1480. if (tls->got_renegotiate) {
  1481. if (tls->server_handshake_count != 2) {
  1482. log_warn(LD_BUG, "We did not notice renegotiation in a timely fashion (%u)!",
  1483. tls->server_handshake_count);
  1484. }
  1485. /* Renegotiation happened! */
  1486. log_info(LD_NET, "Got a TLS renegotiation from %s", ADDR(tls));
  1487. if (tls->negotiated_callback)
  1488. tls->negotiated_callback(tls, tls->callback_arg);
  1489. tls->got_renegotiate = 0;
  1490. return r;
  1491. }
  1492. #endif
  1493. if (err == _TOR_TLS_ZERORETURN || err == TOR_TLS_CLOSE) {
  1494. log_debug(LD_NET,"read returned r=%d; TLS is closed",r);
  1495. tls->state = TOR_TLS_ST_CLOSED;
  1496. return TOR_TLS_CLOSE;
  1497. } else {
  1498. tor_assert(err != TOR_TLS_DONE);
  1499. log_debug(LD_NET,"read returned r=%d, err=%d",r,err);
  1500. return err;
  1501. }
  1502. }
  1503. /** Underlying function for TLS writing. Write up to <b>n</b>
  1504. * characters from <b>cp</b> onto <b>tls</b>. On success, returns the
  1505. * number of characters written. On failure, returns TOR_TLS_ERROR,
  1506. * TOR_TLS_WANTREAD, or TOR_TLS_WANTWRITE.
  1507. */
  1508. int
  1509. tor_tls_write(tor_tls_t *tls, const char *cp, size_t n)
  1510. {
  1511. int r, err;
  1512. tor_assert(tls);
  1513. tor_assert(tls->ssl);
  1514. tor_assert(tls->state == TOR_TLS_ST_OPEN);
  1515. tor_assert(n < INT_MAX);
  1516. if (n == 0)
  1517. return 0;
  1518. if (tls->wantwrite_n) {
  1519. /* if WANTWRITE last time, we must use the _same_ n as before */
  1520. tor_assert(n >= tls->wantwrite_n);
  1521. log_debug(LD_NET,"resuming pending-write, (%d to flush, reusing %d)",
  1522. (int)n, (int)tls->wantwrite_n);
  1523. n = tls->wantwrite_n;
  1524. tls->wantwrite_n = 0;
  1525. }
  1526. r = SSL_write(tls->ssl, cp, (int)n);
  1527. err = tor_tls_get_error(tls, r, 0, "writing", LOG_INFO, LD_NET);
  1528. if (err == TOR_TLS_DONE) {
  1529. return r;
  1530. }
  1531. if (err == TOR_TLS_WANTWRITE || err == TOR_TLS_WANTREAD) {
  1532. tls->wantwrite_n = n;
  1533. }
  1534. return err;
  1535. }
  1536. /** Perform initial handshake on <b>tls</b>. When finished, returns
  1537. * TOR_TLS_DONE. On failure, returns TOR_TLS_ERROR, TOR_TLS_WANTREAD,
  1538. * or TOR_TLS_WANTWRITE.
  1539. */
  1540. int
  1541. tor_tls_handshake(tor_tls_t *tls)
  1542. {
  1543. int r;
  1544. int oldstate;
  1545. tor_assert(tls);
  1546. tor_assert(tls->ssl);
  1547. tor_assert(tls->state == TOR_TLS_ST_HANDSHAKE);
  1548. check_no_tls_errors();
  1549. oldstate = tls->ssl->state;
  1550. if (tls->isServer) {
  1551. log_debug(LD_HANDSHAKE, "About to call SSL_accept on %p (%s)", tls,
  1552. ssl_state_to_string(tls->ssl->state));
  1553. r = SSL_accept(tls->ssl);
  1554. } else {
  1555. log_debug(LD_HANDSHAKE, "About to call SSL_connect on %p (%s)", tls,
  1556. ssl_state_to_string(tls->ssl->state));
  1557. r = SSL_connect(tls->ssl);
  1558. }
  1559. if (oldstate != tls->ssl->state)
  1560. log_debug(LD_HANDSHAKE, "After call, %p was in state %s",
  1561. tls, ssl_state_to_string(tls->ssl->state));
  1562. /* We need to call this here and not earlier, since OpenSSL has a penchant
  1563. * for clearing its flags when you say accept or connect. */
  1564. tor_tls_unblock_renegotiation(tls);
  1565. r = tor_tls_get_error(tls,r,0, "handshaking", LOG_INFO, LD_HANDSHAKE);
  1566. if (ERR_peek_error() != 0) {
  1567. tls_log_errors(tls, tls->isServer ? LOG_INFO : LOG_WARN, LD_HANDSHAKE,
  1568. "handshaking");
  1569. return TOR_TLS_ERROR_MISC;
  1570. }
  1571. if (r == TOR_TLS_DONE) {
  1572. tls->state = TOR_TLS_ST_OPEN;
  1573. return tor_tls_finish_handshake(tls);
  1574. }
  1575. return r;
  1576. }
  1577. /** Perform the final part of the intial TLS handshake on <b>tls</b>. This
  1578. * should be called for the first handshake only: it determines whether the v1
  1579. * or the v2 handshake was used, and adjusts things for the renegotiation
  1580. * handshake as appropriate.
  1581. *
  1582. * tor_tls_handshake() calls this on its own; you only need to call this if
  1583. * bufferevent is doing the handshake for you.
  1584. */
  1585. int
  1586. tor_tls_finish_handshake(tor_tls_t *tls)
  1587. {
  1588. int r = TOR_TLS_DONE;
  1589. if (tls->isServer) {
  1590. SSL_set_info_callback(tls->ssl, NULL);
  1591. SSL_set_verify(tls->ssl, SSL_VERIFY_PEER, always_accept_verify_cb);
  1592. /* There doesn't seem to be a clear OpenSSL API to clear mode flags. */
  1593. tls->ssl->mode &= ~SSL_MODE_NO_AUTO_CHAIN;
  1594. #ifdef V2_HANDSHAKE_SERVER
  1595. if (tor_tls_client_is_using_v2_ciphers(tls->ssl, ADDR(tls))) {
  1596. /* This check is redundant, but back when we did it in the callback,
  1597. * we might have not been able to look up the tor_tls_t if the code
  1598. * was buggy. Fixing that. */
  1599. if (!tls->wasV2Handshake) {
  1600. log_warn(LD_BUG, "For some reason, wasV2Handshake didn't"
  1601. " get set. Fixing that.");
  1602. }
  1603. tls->wasV2Handshake = 1;
  1604. log_debug(LD_HANDSHAKE, "Completed V2 TLS handshake with client; waiting"
  1605. " for renegotiation.");
  1606. } else {
  1607. tls->wasV2Handshake = 0;
  1608. }
  1609. #endif
  1610. } else {
  1611. #ifdef V2_HANDSHAKE_CLIENT
  1612. /* If we got no ID cert, we're a v2 handshake. */
  1613. X509 *cert = SSL_get_peer_certificate(tls->ssl);
  1614. STACK_OF(X509) *chain = SSL_get_peer_cert_chain(tls->ssl);
  1615. int n_certs = sk_X509_num(chain);
  1616. if (n_certs > 1 || (n_certs == 1 && cert != sk_X509_value(chain, 0))) {
  1617. log_debug(LD_HANDSHAKE, "Server sent back multiple certificates; it "
  1618. "looks like a v1 handshake on %p", tls);
  1619. tls->wasV2Handshake = 0;
  1620. } else {
  1621. log_debug(LD_HANDSHAKE,
  1622. "Server sent back a single certificate; looks like "
  1623. "a v2 handshake on %p.", tls);
  1624. tls->wasV2Handshake = 1;
  1625. }
  1626. if (cert)
  1627. X509_free(cert);
  1628. #endif
  1629. if (SSL_set_cipher_list(tls->ssl, SERVER_CIPHER_LIST) == 0) {
  1630. tls_log_errors(NULL, LOG_WARN, LD_HANDSHAKE, "re-setting ciphers");
  1631. r = TOR_TLS_ERROR_MISC;
  1632. }
  1633. }
  1634. return r;
  1635. }
  1636. #ifdef USE_BUFFEREVENTS
  1637. /** Put <b>tls</b>, which must be a client connection, into renegotiation
  1638. * mode. */
  1639. int
  1640. tor_tls_start_renegotiating(tor_tls_t *tls)
  1641. {
  1642. int r = SSL_renegotiate(tls->ssl);
  1643. if (r <= 0) {
  1644. return tor_tls_get_error(tls, r, 0, "renegotiating", LOG_WARN,
  1645. LD_HANDSHAKE);
  1646. }
  1647. return 0;
  1648. }
  1649. #endif
  1650. /** Client only: Renegotiate a TLS session. When finished, returns
  1651. * TOR_TLS_DONE. On failure, returns TOR_TLS_ERROR, TOR_TLS_WANTREAD, or
  1652. * TOR_TLS_WANTWRITE.
  1653. */
  1654. int
  1655. tor_tls_renegotiate(tor_tls_t *tls)
  1656. {
  1657. int r;
  1658. tor_assert(tls);
  1659. /* We could do server-initiated renegotiation too, but that would be tricky.
  1660. * Instead of "SSL_renegotiate, then SSL_do_handshake until done" */
  1661. tor_assert(!tls->isServer);
  1662. if (tls->state != TOR_TLS_ST_RENEGOTIATE) {
  1663. int r = SSL_renegotiate(tls->ssl);
  1664. if (r <= 0) {
  1665. return tor_tls_get_error(tls, r, 0, "renegotiating", LOG_WARN,
  1666. LD_HANDSHAKE);
  1667. }
  1668. tls->state = TOR_TLS_ST_RENEGOTIATE;
  1669. }
  1670. r = SSL_do_handshake(tls->ssl);
  1671. if (r == 1) {
  1672. tls->state = TOR_TLS_ST_OPEN;
  1673. return TOR_TLS_DONE;
  1674. } else
  1675. return tor_tls_get_error(tls, r, 0, "renegotiating handshake", LOG_INFO,
  1676. LD_HANDSHAKE);
  1677. }
  1678. /** Shut down an open tls connection <b>tls</b>. When finished, returns
  1679. * TOR_TLS_DONE. On failure, returns TOR_TLS_ERROR, TOR_TLS_WANTREAD,
  1680. * or TOR_TLS_WANTWRITE.
  1681. */
  1682. int
  1683. tor_tls_shutdown(tor_tls_t *tls)
  1684. {
  1685. int r, err;
  1686. char buf[128];
  1687. tor_assert(tls);
  1688. tor_assert(tls->ssl);
  1689. while (1) {
  1690. if (tls->state == TOR_TLS_ST_SENTCLOSE) {
  1691. /* If we've already called shutdown once to send a close message,
  1692. * we read until the other side has closed too.
  1693. */
  1694. do {
  1695. r = SSL_read(tls->ssl, buf, 128);
  1696. } while (r>0);
  1697. err = tor_tls_get_error(tls, r, CATCH_ZERO, "reading to shut down",
  1698. LOG_INFO, LD_NET);
  1699. if (err == _TOR_TLS_ZERORETURN) {
  1700. tls->state = TOR_TLS_ST_GOTCLOSE;
  1701. /* fall through... */
  1702. } else {
  1703. return err;
  1704. }
  1705. }
  1706. r = SSL_shutdown(tls->ssl);
  1707. if (r == 1) {
  1708. /* If shutdown returns 1, the connection is entirely closed. */
  1709. tls->state = TOR_TLS_ST_CLOSED;
  1710. return TOR_TLS_DONE;
  1711. }
  1712. err = tor_tls_get_error(tls, r, CATCH_SYSCALL|CATCH_ZERO, "shutting down",
  1713. LOG_INFO, LD_NET);
  1714. if (err == _TOR_TLS_SYSCALL) {
  1715. /* The underlying TCP connection closed while we were shutting down. */
  1716. tls->state = TOR_TLS_ST_CLOSED;
  1717. return TOR_TLS_DONE;
  1718. } else if (err == _TOR_TLS_ZERORETURN) {
  1719. /* The TLS connection says that it sent a shutdown record, but
  1720. * isn't done shutting down yet. Make sure that this hasn't
  1721. * happened before, then go back to the start of the function
  1722. * and try to read.
  1723. */
  1724. if (tls->state == TOR_TLS_ST_GOTCLOSE ||
  1725. tls->state == TOR_TLS_ST_SENTCLOSE) {
  1726. log(LOG_WARN, LD_NET,
  1727. "TLS returned \"half-closed\" value while already half-closed");
  1728. return TOR_TLS_ERROR_MISC;
  1729. }
  1730. tls->state = TOR_TLS_ST_SENTCLOSE;
  1731. /* fall through ... */
  1732. } else {
  1733. return err;
  1734. }
  1735. } /* end loop */
  1736. }
  1737. /** Return true iff this TLS connection is authenticated.
  1738. */
  1739. int
  1740. tor_tls_peer_has_cert(tor_tls_t *tls)
  1741. {
  1742. X509 *cert;
  1743. cert = SSL_get_peer_certificate(tls->ssl);
  1744. tls_log_errors(tls, LOG_WARN, LD_HANDSHAKE, "getting peer certificate");
  1745. if (!cert)
  1746. return 0;
  1747. X509_free(cert);
  1748. return 1;
  1749. }
  1750. /** Return the peer certificate, or NULL if there isn't one. */
  1751. tor_cert_t *
  1752. tor_tls_get_peer_cert(tor_tls_t *tls)
  1753. {
  1754. X509 *cert;
  1755. cert = SSL_get_peer_certificate(tls->ssl);
  1756. tls_log_errors(tls, LOG_WARN, LD_HANDSHAKE, "getting peer certificate");
  1757. if (!cert)
  1758. return NULL;
  1759. return tor_cert_new(cert);
  1760. }
  1761. /** Warn that a certificate lifetime extends through a certain range. */
  1762. static void
  1763. log_cert_lifetime(const X509 *cert, const char *problem)
  1764. {
  1765. BIO *bio = NULL;
  1766. BUF_MEM *buf;
  1767. char *s1=NULL, *s2=NULL;
  1768. char mytime[33];
  1769. time_t now = time(NULL);
  1770. struct tm tm;
  1771. if (problem)
  1772. log_warn(LD_GENERAL,
  1773. "Certificate %s: is your system clock set incorrectly?",
  1774. problem);
  1775. if (!(bio = BIO_new(BIO_s_mem()))) {
  1776. log_warn(LD_GENERAL, "Couldn't allocate BIO!"); goto end;
  1777. }
  1778. if (!(ASN1_TIME_print(bio, X509_get_notBefore(cert)))) {
  1779. tls_log_errors(NULL, LOG_WARN, LD_NET, "printing certificate lifetime");
  1780. goto end;
  1781. }
  1782. BIO_get_mem_ptr(bio, &buf);
  1783. s1 = tor_strndup(buf->data, buf->length);
  1784. (void)BIO_reset(bio);
  1785. if (!(ASN1_TIME_print(bio, X509_get_notAfter(cert)))) {
  1786. tls_log_errors(NULL, LOG_WARN, LD_NET, "printing certificate lifetime");
  1787. goto end;
  1788. }
  1789. BIO_get_mem_ptr(bio, &buf);
  1790. s2 = tor_strndup(buf->data, buf->length);
  1791. strftime(mytime, 32, "%b %d %H:%M:%S %Y GMT", tor_gmtime_r(&now, &tm));
  1792. log_warn(LD_GENERAL,
  1793. "(certificate lifetime runs from %s through %s. Your time is %s.)",
  1794. s1,s2,mytime);
  1795. end:
  1796. /* Not expected to get invoked */
  1797. tls_log_errors(NULL, LOG_WARN, LD_NET, "getting certificate lifetime");
  1798. if (bio)
  1799. BIO_free(bio);
  1800. tor_free(s1);
  1801. tor_free(s2);
  1802. }
  1803. /** Helper function: try to extract a link certificate and an identity
  1804. * certificate from <b>tls</b>, and store them in *<b>cert_out</b> and
  1805. * *<b>id_cert_out</b> respectively. Log all messages at level
  1806. * <b>severity</b>.
  1807. *
  1808. * Note that a reference is added to cert_out, so it needs to be
  1809. * freed. id_cert_out doesn't. */
  1810. static void
  1811. try_to_extract_certs_from_tls(int severity, tor_tls_t *tls,
  1812. X509 **cert_out, X509 **id_cert_out)
  1813. {
  1814. X509 *cert = NULL, *id_cert = NULL;
  1815. STACK_OF(X509) *chain = NULL;
  1816. int num_in_chain, i;
  1817. *cert_out = *id_cert_out = NULL;
  1818. if (!(cert = SSL_get_peer_certificate(tls->ssl)))
  1819. return;
  1820. *cert_out = cert;
  1821. if (!(chain = SSL_get_peer_cert_chain(tls->ssl)))
  1822. return;
  1823. num_in_chain = sk_X509_num(chain);
  1824. /* 1 means we're receiving (server-side), and it's just the id_cert.
  1825. * 2 means we're connecting (client-side), and it's both the link
  1826. * cert and the id_cert.
  1827. */
  1828. if (num_in_chain < 1) {
  1829. log_fn(severity,LD_PROTOCOL,
  1830. "Unexpected number of certificates in chain (%d)",
  1831. num_in_chain);
  1832. return;
  1833. }
  1834. for (i=0; i<num_in_chain; ++i) {
  1835. id_cert = sk_X509_value(chain, i);
  1836. if (X509_cmp(id_cert, cert) != 0)
  1837. break;
  1838. }
  1839. *id_cert_out = id_cert;
  1840. }
  1841. /** If the provided tls connection is authenticated and has a
  1842. * certificate chain that is currently valid and signed, then set
  1843. * *<b>identity_key</b> to the identity certificate's key and return
  1844. * 0. Else, return -1 and log complaints with log-level <b>severity</b>.
  1845. */
  1846. int
  1847. tor_tls_verify(int severity, tor_tls_t *tls, crypto_pk_env_t **identity_key)
  1848. {
  1849. X509 *cert = NULL, *id_cert = NULL;
  1850. EVP_PKEY *id_pkey = NULL;
  1851. RSA *rsa;
  1852. int r = -1;
  1853. *identity_key = NULL;
  1854. try_to_extract_certs_from_tls(severity, tls, &cert, &id_cert);
  1855. if (!cert)
  1856. goto done;
  1857. if (!id_cert) {
  1858. log_fn(severity,LD_PROTOCOL,"No distinct identity certificate found");
  1859. goto done;
  1860. }
  1861. tls_log_errors(tls, severity, LD_HANDSHAKE, "before verifying certificate");
  1862. if (!(id_pkey = X509_get_pubkey(id_cert)) ||
  1863. X509_verify(cert, id_pkey) <= 0) {
  1864. log_fn(severity,LD_PROTOCOL,"X509_verify on cert and pkey returned <= 0");
  1865. tls_log_errors(tls, severity, LD_HANDSHAKE, "verifying certificate");
  1866. goto done;
  1867. }
  1868. rsa = EVP_PKEY_get1_RSA(id_pkey);
  1869. if (!rsa)
  1870. goto done;
  1871. *identity_key = _crypto_new_pk_env_rsa(rsa);
  1872. r = 0;
  1873. done:
  1874. if (cert)
  1875. X509_free(cert);
  1876. if (id_pkey)
  1877. EVP_PKEY_free(id_pkey);
  1878. /* This should never get invoked, but let's make sure in case OpenSSL
  1879. * acts unexpectedly. */
  1880. tls_log_errors(tls, LOG_WARN, LD_HANDSHAKE, "finishing tor_tls_verify");
  1881. return r;
  1882. }
  1883. /** Check whether the certificate set on the connection <b>tls</b> is
  1884. * expired or not-yet-valid, give or take <b>tolerance</b>
  1885. * seconds. Return 0 for valid, -1 for failure.
  1886. *
  1887. * NOTE: you should call tor_tls_verify before tor_tls_check_lifetime.
  1888. */
  1889. int
  1890. tor_tls_check_lifetime(tor_tls_t *tls, int tolerance)
  1891. {
  1892. X509 *cert;
  1893. int r = -1;
  1894. if (!(cert = SSL_get_peer_certificate(tls->ssl)))
  1895. goto done;
  1896. if (check_cert_lifetime_internal(cert, tolerance) < 0)
  1897. goto done;
  1898. r = 0;
  1899. done:
  1900. if (cert)
  1901. X509_free(cert);
  1902. /* Not expected to get invoked */
  1903. tls_log_errors(tls, LOG_WARN, LD_NET, "checking certificate lifetime");
  1904. return r;
  1905. }
  1906. /** Helper: check whether <b>cert</b> is currently live, give or take
  1907. * <b>tolerance</b> seconds. If it is live, return 0. If it is not live,
  1908. * log a message and return -1. */
  1909. static int
  1910. check_cert_lifetime_internal(const X509 *cert, int tolerance)
  1911. {
  1912. time_t now, t;
  1913. now = time(NULL);
  1914. t = now + tolerance;
  1915. if (X509_cmp_time(X509_get_notBefore(cert), &t) > 0) {
  1916. log_cert_lifetime(cert, "not yet valid");
  1917. return -1;
  1918. }
  1919. t = now - tolerance;
  1920. if (X509_cmp_time(X509_get_notAfter(cert), &t) < 0) {
  1921. log_cert_lifetime(cert, "already expired");
  1922. return -1;
  1923. }
  1924. return 0;
  1925. }
  1926. /** Return the number of bytes available for reading from <b>tls</b>.
  1927. */
  1928. int
  1929. tor_tls_get_pending_bytes(tor_tls_t *tls)
  1930. {
  1931. tor_assert(tls);
  1932. return SSL_pending(tls->ssl);
  1933. }
  1934. /** If <b>tls</b> requires that the next write be of a particular size,
  1935. * return that size. Otherwise, return 0. */
  1936. size_t
  1937. tor_tls_get_forced_write_size(tor_tls_t *tls)
  1938. {
  1939. return tls->wantwrite_n;
  1940. }
  1941. /** Sets n_read and n_written to the number of bytes read and written,
  1942. * respectively, on the raw socket used by <b>tls</b> since the last time this
  1943. * function was called on <b>tls</b>. */
  1944. void
  1945. tor_tls_get_n_raw_bytes(tor_tls_t *tls, size_t *n_read, size_t *n_written)
  1946. {
  1947. BIO *wbio, *tmpbio;
  1948. unsigned long r, w;
  1949. r = BIO_number_read(SSL_get_rbio(tls->ssl));
  1950. /* We want the number of bytes actually for real written. Unfortunately,
  1951. * sometimes OpenSSL replaces the wbio on tls->ssl with a buffering bio,
  1952. * which makes the answer turn out wrong. Let's cope with that. Note
  1953. * that this approach will fail if we ever replace tls->ssl's BIOs with
  1954. * buffering bios for reasons of our own. As an alternative, we could
  1955. * save the original BIO for tls->ssl in the tor_tls_t structure, but
  1956. * that would be tempting fate. */
  1957. wbio = SSL_get_wbio(tls->ssl);
  1958. if (wbio->method == BIO_f_buffer() && (tmpbio = BIO_next(wbio)) != NULL)
  1959. wbio = tmpbio;
  1960. w = BIO_number_written(wbio);
  1961. /* We are ok with letting these unsigned ints go "negative" here:
  1962. * If we wrapped around, this should still give us the right answer, unless
  1963. * we wrapped around by more than ULONG_MAX since the last time we called
  1964. * this function.
  1965. */
  1966. *n_read = (size_t)(r - tls->last_read_count);
  1967. *n_written = (size_t)(w - tls->last_write_count);
  1968. if (*n_read > INT_MAX || *n_written > INT_MAX) {
  1969. log_warn(LD_BUG, "Preposterously large value in tor_tls_get_n_raw_bytes. "
  1970. "r=%lu, last_read=%lu, w=%lu, last_written=%lu",
  1971. r, tls->last_read_count, w, tls->last_write_count);
  1972. }
  1973. tls->last_read_count = r;
  1974. tls->last_write_count = w;
  1975. }
  1976. /** Implement check_no_tls_errors: If there are any pending OpenSSL
  1977. * errors, log an error message. */
  1978. void
  1979. _check_no_tls_errors(const char *fname, int line)
  1980. {
  1981. if (ERR_peek_error() == 0)
  1982. return;
  1983. log(LOG_WARN, LD_CRYPTO, "Unhandled OpenSSL errors found at %s:%d: ",
  1984. tor_fix_source_file(fname), line);
  1985. tls_log_errors(NULL, LOG_WARN, LD_NET, NULL);
  1986. }
  1987. /** Return true iff the initial TLS connection at <b>tls</b> did not use a v2
  1988. * TLS handshake. Output is undefined if the handshake isn't finished. */
  1989. int
  1990. tor_tls_used_v1_handshake(tor_tls_t *tls)
  1991. {
  1992. if (tls->isServer) {
  1993. #ifdef V2_HANDSHAKE_SERVER
  1994. return ! tls->wasV2Handshake;
  1995. #endif
  1996. } else {
  1997. #ifdef V2_HANDSHAKE_CLIENT
  1998. return ! tls->wasV2Handshake;
  1999. #endif
  2000. }
  2001. return 1;
  2002. }
  2003. /** Return true iff <b>name</b> is a DN of a kind that could only
  2004. * occur in a v3-handshake-indicating certificate */
  2005. static int
  2006. dn_indicates_v3_cert(X509_NAME *name)
  2007. {
  2008. #ifdef DISABLE_V3_LINKPROTO_CLIENTSIDE
  2009. (void)name;
  2010. return 0;
  2011. #else
  2012. X509_NAME_ENTRY *entry;
  2013. int n_entries;
  2014. ASN1_OBJECT *obj;
  2015. ASN1_STRING *str;
  2016. unsigned char *s;
  2017. int len, r;
  2018. n_entries = X509_NAME_entry_count(name);
  2019. if (n_entries != 1)
  2020. return 1; /* More than one entry in the DN. */
  2021. entry = X509_NAME_get_entry(name, 0);
  2022. obj = X509_NAME_ENTRY_get_object(entry);
  2023. if (OBJ_obj2nid(obj) != OBJ_txt2nid("commonName"))
  2024. return 1; /* The entry isn't a commonName. */
  2025. str = X509_NAME_ENTRY_get_data(entry);
  2026. len = ASN1_STRING_to_UTF8(&s, str);
  2027. if (len < 0)
  2028. return 0;
  2029. r = fast_memneq(s + len - 4, ".net", 4);
  2030. OPENSSL_free(s);
  2031. return r;
  2032. #endif
  2033. }
  2034. /** Return true iff the peer certificate we're received on <b>tls</b>
  2035. * indicates that this connection should use the v3 (in-protocol)
  2036. * authentication handshake.
  2037. *
  2038. * Only the connection initiator should use this, and only once the initial
  2039. * handshake is done; the responder detects a v1 handshake by cipher types,
  2040. * and a v3/v2 handshake by Versions cell vs renegotiation.
  2041. */
  2042. int
  2043. tor_tls_received_v3_certificate(tor_tls_t *tls)
  2044. {
  2045. X509 *cert = SSL_get_peer_certificate(tls->ssl);
  2046. EVP_PKEY *key;
  2047. X509_NAME *issuer_name, *subject_name;
  2048. if (!cert) {
  2049. log_warn(LD_BUG, "Called on a connection with no peer certificate");
  2050. return 0;
  2051. }
  2052. subject_name = X509_get_subject_name(cert);
  2053. issuer_name = X509_get_issuer_name(cert);
  2054. if (X509_name_cmp(subject_name, issuer_name) == 0)
  2055. return 1; /* purportedly self signed */
  2056. if (dn_indicates_v3_cert(subject_name) ||
  2057. dn_indicates_v3_cert(issuer_name))
  2058. return 1; /* DN is fancy */
  2059. key = X509_get_pubkey(cert);
  2060. if (EVP_PKEY_bits(key) != 1024 ||
  2061. EVP_PKEY_type(key->type) != EVP_PKEY_RSA) {
  2062. EVP_PKEY_free(key);
  2063. return 1; /* Key is fancy */
  2064. }
  2065. EVP_PKEY_free(key);
  2066. return 0;
  2067. }
  2068. /** Return the number of server handshakes that we've noticed doing on
  2069. * <b>tls</b>. */
  2070. int
  2071. tor_tls_get_num_server_handshakes(tor_tls_t *tls)
  2072. {
  2073. return tls->server_handshake_count;
  2074. }
  2075. /** Return true iff the server TLS connection <b>tls</b> got the renegotiation
  2076. * request it was waiting for. */
  2077. int
  2078. tor_tls_server_got_renegotiate(tor_tls_t *tls)
  2079. {
  2080. return tls->got_renegotiate;
  2081. }
  2082. /** Set the DIGEST256_LEN buffer at <b>secrets_out</b> to the value used in
  2083. * the v3 handshake to prove that the client knows the TLS secrets for the
  2084. * connection <b>tls</b>. Return 0 on success, -1 on failure.
  2085. */
  2086. int
  2087. tor_tls_get_tlssecrets(tor_tls_t *tls, uint8_t *secrets_out)
  2088. {
  2089. #define TLSSECRET_MAGIC "Tor V3 handshake TLS cross-certification"
  2090. char buf[128];
  2091. size_t len;
  2092. tor_assert(tls);
  2093. tor_assert(tls->ssl);
  2094. tor_assert(tls->ssl->s3);
  2095. tor_assert(tls->ssl->session);
  2096. /*
  2097. The value is an HMAC, using the TLS master key as the HMAC key, of
  2098. client_random | server_random | TLSSECRET_MAGIC
  2099. */
  2100. memcpy(buf + 0, tls->ssl->s3->client_random, 32);
  2101. memcpy(buf + 32, tls->ssl->s3->server_random, 32);
  2102. memcpy(buf + 64, TLSSECRET_MAGIC, strlen(TLSSECRET_MAGIC) + 1);
  2103. len = 64 + strlen(TLSSECRET_MAGIC) + 1;
  2104. crypto_hmac_sha256((char*)secrets_out,
  2105. (char*)tls->ssl->session->master_key,
  2106. tls->ssl->session->master_key_length,
  2107. buf, len);
  2108. memset(buf, 0, sizeof(buf));
  2109. return 0;
  2110. }
  2111. /** Examine the amount of memory used and available for buffers in <b>tls</b>.
  2112. * Set *<b>rbuf_capacity</b> to the amount of storage allocated for the read
  2113. * buffer and *<b>rbuf_bytes</b> to the amount actually used.
  2114. * Set *<b>wbuf_capacity</b> to the amount of storage allocated for the write
  2115. * buffer and *<b>wbuf_bytes</b> to the amount actually used. */
  2116. void
  2117. tor_tls_get_buffer_sizes(tor_tls_t *tls,
  2118. size_t *rbuf_capacity, size_t *rbuf_bytes,
  2119. size_t *wbuf_capacity, size_t *wbuf_bytes)
  2120. {
  2121. if (tls->ssl->s3->rbuf.buf)
  2122. *rbuf_capacity = tls->ssl->s3->rbuf.len;
  2123. else
  2124. *rbuf_capacity = 0;
  2125. if (tls->ssl->s3->wbuf.buf)
  2126. *wbuf_capacity = tls->ssl->s3->wbuf.len;
  2127. else
  2128. *wbuf_capacity = 0;
  2129. *rbuf_bytes = tls->ssl->s3->rbuf.left;
  2130. *wbuf_bytes = tls->ssl->s3->wbuf.left;
  2131. }
  2132. #ifdef USE_BUFFEREVENTS
  2133. /** Construct and return an TLS-encrypting bufferevent to send data over
  2134. * <b>socket</b>, which must match the socket of the underlying bufferevent
  2135. * <b>bufev_in</b>. The TLS object <b>tls</b> is used for encryption.
  2136. *
  2137. * This function will either create a filtering bufferevent that wraps around
  2138. * <b>bufev_in</b>, or it will free bufev_in and return a new bufferevent that
  2139. * uses the <b>tls</b> to talk to the network directly. Do not use
  2140. * <b>bufev_in</b> after calling this function.
  2141. *
  2142. * The connection will start out doing a server handshake if <b>receiving</b>
  2143. * is strue, and a client handshake otherwise.
  2144. *
  2145. * Returns NULL on failure.
  2146. */
  2147. struct bufferevent *
  2148. tor_tls_init_bufferevent(tor_tls_t *tls, struct bufferevent *bufev_in,
  2149. evutil_socket_t socket, int receiving,
  2150. int filter)
  2151. {
  2152. struct bufferevent *out;
  2153. const enum bufferevent_ssl_state state = receiving ?
  2154. BUFFEREVENT_SSL_ACCEPTING : BUFFEREVENT_SSL_CONNECTING;
  2155. if (filter || tor_libevent_using_iocp_bufferevents()) {
  2156. /* Grab an extra reference to the SSL, since BEV_OPT_CLOSE_ON_FREE
  2157. means that the SSL will get freed too.
  2158. This increment makes our SSL usage not-threadsafe, BTW. We should
  2159. see if we're allowed to use CRYPTO_add from outside openssl. */
  2160. tls->ssl->references += 1;
  2161. out = bufferevent_openssl_filter_new(tor_libevent_get_base(),
  2162. bufev_in,
  2163. tls->ssl,
  2164. state,
  2165. BEV_OPT_DEFER_CALLBACKS|
  2166. BEV_OPT_CLOSE_ON_FREE);
  2167. /* Tell the underlying bufferevent when to accept more data from the SSL
  2168. filter (only when it's got less than 32K to write), and when to notify
  2169. the SSL filter that it could write more (when it drops under 24K). */
  2170. bufferevent_setwatermark(bufev_in, EV_WRITE, 24*1024, 32*1024);
  2171. } else {
  2172. if (bufev_in) {
  2173. evutil_socket_t s = bufferevent_getfd(bufev_in);
  2174. tor_assert(s == -1 || s == socket);
  2175. tor_assert(evbuffer_get_length(bufferevent_get_input(bufev_in)) == 0);
  2176. tor_assert(evbuffer_get_length(bufferevent_get_output(bufev_in)) == 0);
  2177. tor_assert(BIO_number_read(SSL_get_rbio(tls->ssl)) == 0);
  2178. tor_assert(BIO_number_written(SSL_get_rbio(tls->ssl)) == 0);
  2179. bufferevent_free(bufev_in);
  2180. }
  2181. /* Current versions (as of 2.0.x) of Libevent need to defer
  2182. * bufferevent_openssl callbacks, or else our callback functions will
  2183. * get called reentrantly, which is bad for us.
  2184. */
  2185. out = bufferevent_openssl_socket_new(tor_libevent_get_base(),
  2186. socket,
  2187. tls->ssl,
  2188. state,
  2189. BEV_OPT_DEFER_CALLBACKS);
  2190. }
  2191. tls->state = TOR_TLS_ST_BUFFEREVENT;
  2192. /* Unblock _after_ creating the bufferevent, since accept/connect tend to
  2193. * clear flags. */
  2194. tor_tls_unblock_renegotiation(tls);
  2195. return out;
  2196. }
  2197. #endif