summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeFilesLines
* ext/pre_shared_key: make PSK identity parsing robustertmp-session-ticket-key-nameDaiki Ueno2018-06-012-38/+23
| | | | | | | | | | | | Previously, to determine whether a PSK identity is a ticket or a PSK username, it relied on PskIdentity.obfuscated_ticket_age, which "SHOULD" be 0 if the identity is a PSK username. This patch instead checks the key name of the ticket first and then check the constraints of the PSK username. That way, it can distinguish tickets and PSK usernames in a more realible manner. Signed-off-by: Daiki Ueno <dueno@redhat.com>
* _gnutls_decrypt_session_ticket: fail early on key name mismatchDaiki Ueno2018-06-011-9/+7
| | | | | | | If the key name of the ticket doesn't match, we don't need to parse the entire ticket. Signed-off-by: Daiki Ueno <dueno@redhat.com>
* Merge branch 'tmp_rename_ecc_extensions' into 'master'Nikos Mavrogiannopoulos2018-05-3112-158/+217
|\ | | | | | | | | | | | | Renamed extension supported ECC to supported groups. Closes #451 and #454 See merge request gnutls/gnutls!649
| * Renamed extension supported ECC to supported groups. Fixes #451.Tom Vrancken2018-05-2912-158/+217
|/ | | | | | Split combined ECC extensions into different files. Signed-off-by: Tom Vrancken <dev@tomvrancken.nl>
* Merge branch 'fix-warnings' into 'master'Nikos Mavrogiannopoulos2018-05-2610-18/+41
|\ | | | | | | | | Fix some warnings in test suite See merge request gnutls/gnutls!647
| * Fix more warnings in tests/Tim Rühsen2018-05-264-1/+32
| | | | | | | | | | | | | | | | | | To not introduce larger code changes, these bugs are mostly fixed by #pragma understood by gcc and clang. A check for the minimal gcc/clang version prevents warnings about unknown pragmas with other or older compilers. Signed-off-by: Tim Rühsen <tim.ruehsen@gmx.de>
| * Fix warnings in test suiteTim Rühsen2018-05-266-17/+9
|/ | | | | | | | | | | | | | | | | | | Fixes: tls-ext-register.c:238:11: warning: unused variable 'i' [-Wunused-variable] record-retvals.c:118:14: warning: unused variable 'vers' [-Wunused-variable] record-retvals.c:347:1: warning: label 'next' defined but not used [-Wunused-label] alerts.c:71:14: warning: unused variable 'vers' [-Wunused-variable] alerts.c:71:11: warning: unused variable 'i' [-Wunused-variable] alerts.c:160:11: warning: unused variable 'i' [-Wunused-variable] send-client-cert.c:176:6: warning: no previous prototype for 'start' [-Wmissing-prototypes] tls-session-supplemental.c:186:6: warning: unused variable 'optval' [-Wunused-variable] tls-session-supplemental.c:184:7: warning: unused variable 'topbuf' [-Wunused-variable] tls-session-supplemental.c:183:6: warning: unused variable 'err' [-Wunused-variable] x509self.c:211:6: warning: unused variable 'optval' [-Wunused-variable] x509self.c:208:7: warning: unused variable 'topbuf' [-Wunused-variable] x509self.c:207:6: warning: unused variable 'err' [-Wunused-variable] Signed-off-by: Tim Rühsen <tim.ruehsen@gmx.de>
* Merge branch 'tmp-session-resumption2' into 'master'Nikos Mavrogiannopoulos2018-05-2648-875/+2528
|\ | | | | | | | | | | | | TLS 1.3 session resumption Closes #441 and #290 See merge request gnutls/gnutls!638
| * tests: resume: check whether PSK username matches on resumptionNikos Mavrogiannopoulos2018-05-261-2/+14
| | | | | | | | Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * resumption: reduce session parameters stored under TLS1.3Nikos Mavrogiannopoulos2018-05-261-162/+131
| | | | | | | | | | | | | | That is, do not store extensions or security parameters which depend on extension negotiation. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * session_ticket: use random noncesNikos Mavrogiannopoulos2018-05-261-4/+1
| | | | | | | | | | | | | | Avoid using any time values in plain as this could allow association of clients. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * updated auto-generated filesNikos Mavrogiannopoulos2018-05-263-0/+4
| | | | | | | | Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * doc: mention changes under TLS 1.3Nikos Mavrogiannopoulos2018-05-261-0/+9
| | | | | | | | Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * tests: added main use-case test for gnutls_session_ticket_send()Nikos Mavrogiannopoulos2018-05-262-1/+361
| | | | | | | | | | | | | | | | | | It verifies whether a server can use gnutls_session_ticket_send() to send a ticket after re-authentication, and whether a client can receive that ticket and re-authenticate with it, while its certificate is made available to server. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * handshake: do not include async messages into transcriptNikos Mavrogiannopoulos2018-05-261-34/+38
| | | | | | | | | | | | | | This prevents the session tickets to affect re-authentication or other operations that require the transcript. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * gnutls_session_ticket_send: new functionNikos Mavrogiannopoulos2018-05-265-1/+57
| | | | | | | | | | | | | | Introduced in order for a server to be able to send an arbitrary amount of tickets, at any time. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * handshake: store session parameters in TLS1.3 ticketNikos Mavrogiannopoulos2018-05-266-26/+77
| | | | | | | | | | | | | | This allows a TLS1.3 server to obtain certificate or other information from the client on a resumed session. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * handshake: TLS1.3 async messages trigger the handshake hookNikos Mavrogiannopoulos2018-05-264-19/+78
| | | | | | | | | | | | | | | | | | | | That is, the callback set with gnutls_handshake_set_hook_function() is now called even on the async handshake messages received under TLS1.3, such as key update, etc. Resolves #441 Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * tests: check various parameters on resumptionNikos Mavrogiannopoulos2018-05-264-60/+158
| | | | | | | | | | | | | | | | | | | | | | | | That is, check gnutls_session_is_resumed() is functional on server side, whether PRF is respected on resumption, whether gnutls_certificate_get_peers() and gnutls_certificate_get_ours() operate as expected, and whether session resumption fails with tickets after expiration time has passed. In addition improve function documentation by documenting the current semantics for the functions above. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * tests: exercise TLS 1.3 session resumptionDaiki Ueno2018-05-264-2/+69
| | | | | | | | | | | | | | | | | | | | This requires a few changes to the resume.c test: because NewSessionTicket is a post-handshake message, gnutls_session_get_data2() needs to be called after sending the first application data. Also, when GNUTLS_E_AGAIN, gnutls_record_recv() needs to retry. Signed-off-by: Daiki Ueno <dueno@redhat.com>
| * gnutls-cli: ignore E_AGAIN to accommodate async handshake messageDaiki Ueno2018-05-261-1/+1
| | | | | | | | | | | | | | | | | | When an async handshake message has arrived while no application data is available, gnutls_record_recv() returns GNUTLS_E_AGAIN and the loop in socket_recv() blocks. Since socket_recv() is guarded by select(), it should be safe to ignore GNUTLS_E_AGAIN. Signed-off-by: Daiki Ueno <dueno@redhat.com>
| * gnutls_auth_get_type: simplifiedNikos Mavrogiannopoulos2018-05-261-16/+4
| | | | | | | | Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * TLS 1.3: Introduced TLS 1.3 session resumptionAnder Juaristi2018-05-2630-373/+1266
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This introduces session resumption under TLS 1.3. For that, it enables the psk_ke_modes extension when we enable session tickets. It enables sending session tickets in addition to PSK usernames. The detection of resumption vs pure PSK is done by comparing the indexes sent with the index received by the server. TLS 1.3 session tickets are always sent to the peer unless the GNUTLS_NO_TICKETS is specified. Resolves #290 Signed-off-by: Ander Juaristi <a@juaristi.eus> Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com> Signed-off-by: Daiki Ueno <dueno@redhat.com>
| * psk_ke_modes: introduce psk_ke_modes_is_required() and update docNikos Mavrogiannopoulos2018-05-261-6/+22
| | | | | | | | | | | | | | | | This adds a helper function to be extended when session resumption is added, and clarifies why we send a prioritized list on ke modes. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com> Signed-off-by: Ander Juaristi <a@juaristi.eus>
| * session tickets: expose {encrypt,decrypt}_ticket as internal APIAnder Juaristi2018-05-264-247/+274
| | | | | | | | | | | | | | | | To reuse the same ticket construction in any TLS versions, expose the private functions in ext/session_ticket.c. Signed-off-by: Ander Juaristi <a@juaristi.eus> Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * ext/pre_shared_key: fix binder calculation when HRR is sentDaiki Ueno2018-05-263-14/+48
| | | | | | | | | | | | | | In that case, ClientHello1 and HelloRetryRequest are included in the PSK binder computation, not only the truncated ClientHello2. Signed-off-by: Daiki Ueno <dueno@redhat.com>
| * handshake: record transcript offset of client FinishedDaiki Ueno2018-05-262-0/+9
|/ | | | | | | This is for deriving resumption_master_secret, whose value is calculated over ClientHello...client Finished. Signed-off-by: Daiki Ueno <dueno@redhat.com>
* Merge branch 'fix-testdane' into 'master'Nikos Mavrogiannopoulos2018-05-241-2/+2
|\ | | | | | | | | Fix testdane by removing www.kumari.net See merge request gnutls/gnutls!648
| * Fix testdane by removing www.kumari.netTim Rühsen2018-05-241-2/+2
|/ | | | | | | danetool --check www.kumari.net: Verification: Verification failed. The certificate differs. Signed-off-by: Tim Rühsen <tim.ruehsen@gmx.de>
* Merge branch 'docs-fix' into 'master'Nikos Mavrogiannopoulos2018-05-232-167/+164
|\ | | | | | | | | | | | | Updated documentation on Hello extensions. Closes #437 See merge request gnutls/gnutls!644
| * Fixed some spelling issues. [ci skip]Tom Vrancken2018-05-231-2/+2
| | | | | | | | Signed-off-by: Tom Vrancken <dev@tomvrancken.nl>
| * Added extra extension flag to docs.Tom Vrancken2018-05-231-1/+7
| | | | | | | | | | | | Added description of default pack and unpack functions. Signed-off-by: Tom Vrancken <dev@tomvrancken.nl>
| * Removed section about Heartbleed.Tom Vrancken2018-05-231-29/+2
| | | | | | | | | | | | Referenced new functions _gnutls_hello_ext_set_datum / _gnutls_hello_ext_get_datum for manipulation extension data. Signed-off-by: Tom Vrancken <dev@tomvrancken.nl>
| * Fixed typo and incorrect function references.Tom Vrancken2018-05-231-26/+26
| | | | | | | | Signed-off-by: Tom Vrancken <dev@tomvrancken.nl>
| * Updated documentation on Hello extensions.Tom Vrancken2018-05-232-135/+153
|/ | | | Signed-off-by: Tom Vrancken <dev@tomvrancken.nl>
* Merge branch 'tmp-pkcs11-raw' into 'master'Nikos Mavrogiannopoulos2018-05-2113-16/+576
|\ | | | | | | | | gnutls_pkcs11_token_get_ptr, gnutls_pkcs11_obj_get_ptr: introduced See merge request gnutls/gnutls!640
| * pkcs11: consistent/clear naming of find obj callbacks and structsNikos Mavrogiannopoulos2018-05-211-10/+10
| | | | | | | | Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
| * updated auto-generated filesNikos Mavrogiannopoulos2018-05-213-0/+8
| | | | | | | | Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
| * gnutls_pkcs11_token_get_ptr, gnutls_pkcs11_obj_get_ptr: introducedNikos Mavrogiannopoulos2018-05-2110-6/+558
|/ | | | | | | | | This allows an application to open a PKCS#11 token using a URI, and use it directly, bypassing gnutls. That is useful to take advantage of PKCS#11 functionality not wrapped by gnutls but still use PKCS#11 URIs to identify the token. Signed-off-by: Nikos Mavrogiannopoulos <nmav@redhat.com>
* CONTRIBUTING.md: document why gnulib is kept separate [ci skip]Nikos Mavrogiannopoulos2018-05-191-0/+6
| | | | Signed-off-by: Nikos Mavrogiannopoulos <nmav@gnutls.org>
* certtool: split long prompt for serialMartin Sucha2018-05-191-3/+5
| | | | Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* doc: add note about CRL numbers to man pageMartin Sucha2018-05-191-0/+7
| | | | Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* certtool: ask again until serial/crl number is validMartin Sucha2018-05-191-24/+36
| | | | Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* tests: remove check for broken datefudgeMartin Sucha2018-05-191-5/+1
| | | | | | | | This check is not necessary with Fedora 28 build image currently used for CI as it contains datefudge 1.22 as well. Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* certtool: remove extra functionMartin Sucha2018-05-191-21/+3
| | | | | | I did not notice strip_nl previously. Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* tests: add negative tests for certtool crl numbersMartin Sucha2018-05-191-0/+63
| | | | Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* doc: add NEWS about serial and CRL numbersMartin Sucha2018-05-191-0/+8
| | | | Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* doc: add hex format to example templateMartin Sucha2018-05-191-1/+3
| | | | Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* certtool: use larger serial and CRL numbersMartin Sucha2018-05-198-65/+465
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Serial/CRL numbers can be up to 20 octets in length as per RFC 5280, so it should be possible to use such numbers as input to certtool. certtool only allowed to specify 63-bit numbers in template file or interactively (even though it generated larger numbers in batch mode by default). This patch allows large numbers to be specified as a hexadecimal string. Parsing of decimal numbers larger than native integers would require adding dependency on libgmp directly to certtool or extending the API exposed by GnuTLS library with parsing functions. Since most tools (including GnuTLS) display serial numbers in hexadecimal, it is not worth the trouble to support large decimal numbers. Default values are unified between batch mode and interactive input and their size is extended. CA/Browser forum recommends CAs to include at least 64 bits of random data in the certificate serial numbers in Baseline Requirements[1] section 7.1, but gnutls adds only 32 bits. Some other implementations generate default serial numbers with more entropy as well, here is the current state as of May 2018: +----------------+-------------------------------+ | Implementation | Random bits in default serial | +----------------+-------------------------------+ | OpenSSL [2] | 159 | | CFSSL [3] | 159 | | wolfSSL [4] | 128 | | GnuTLS | 32 | | Mbed TLS [5] | 0 (defaults to 1) | +----------------+-------------------------------+ The 20 octet field size can fit numbers up to 159 bits since the most significant bit must be zero as numbers in DER encoding are in two's complement and the serial and CRL numbers must be positive. Default serial numbers are extended to full 159 bits allowed by the field size and are completely random, which matches other implementations. CRL numbers have the same size requirements, but also need to be monotonic (RFC 5280, section 5.2.3). That's why timestamp is used in them. The timestamp portion is extended from 31 bits to 39 bits as 31 bits will overflow in year 2038. The rest of the available space up to 159 bits allowed in the 20 octet limit is filled with random bits. Since the new CRL numbers are larger, the requirement for them to be monotonically increasing is preserved when upgrading to a newer version. This does not hold the other way around though, so after using a newer version of certtool to generate a CRL with default number and publishing it, it's not possible to use older version anymore to generate subsequent CRLs. Unfortunately, there is no easy workaround for users of older certtool, since it is not possible to specify CRL numbers greater than 63 bits manually prior to this change. Users intending to downgrade to older version later are advised to specify the CRL numbers in new version of certtool manually with values they are smaller than what would get generated by default in the old version. grep does not recognize CRLF line endings generated in tests using MinGW, so we need to convert those to LF endings for $ in the regex to match test output correctly. datefudge 1.21 that is present in Fedora 26 image trims the timestamp to 32 bits. That bug was fixed in datefudge 1.22 available in the Debian image, so we check if datefudge behaves correctly and skip the test that uses more than 32 bits if datefudge is broken. [1] https://cabforum.org/wp-content/uploads/CA-Browser-Forum-BR-1.4.2.pdf [2] https://github.com/openssl/openssl/blob/6ebb49f3f9c9333611192561979bb799fa1eb76d/apps/apps.c#L1513 [3] https://github.com/cloudflare/cfssl/blob/5d63dbd981b5c408effbb58c442d54761ff94fbd/signer/local/local.go#L295 [4] https://github.com/wolfSSL/wolfssl/blob/d60b16c5b8c19cc61db4a5c3f5e085a7a158cd28/wolfcrypt/src/asn.c#L9791 [5] https://github.com/ARMmbed/mbedtls/blob/84a1107818aaddfd2abe4c5a3478cf84ab2e26b4/programs/x509/cert_write.c#L81 Signed-off-by: Martin Sucha <anty.sk+git@gmail.com>
* Merge branch 'tmp-prohibit-tls-dtls-mix' into 'master'Nikos Mavrogiannopoulos2018-05-1829-65/+746
|\ | | | | | | | | | | | | Added the notion of TLS-only and DTLS-only extensions Closes #440 See merge request gnutls/gnutls!634