aboutsummaryrefslogtreecommitdiff
path: root/src/gns
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2019-02-23 10:48:08 +0100
committerChristian Grothoff <christian@grothoff.org>2019-02-23 10:48:08 +0100
commitf1e8076ed474a429aff32839ed5f8fc20371839c (patch)
treebb38cb99b0e9cb7b937d33b539e74b9eb9fe4d32 /src/gns
parent3d0f1dd3805bfef30ff7a7f8e246a926b7fa7838 (diff)
parent7b01b7b1760cc973719c9a20123f99e4a7e1b5a6 (diff)
downloadgnunet-f1e8076ed474a429aff32839ed5f8fc20371839c.tar.gz
gnunet-f1e8076ed474a429aff32839ed5f8fc20371839c.zip
merge
Diffstat (limited to 'src/gns')
-rw-r--r--src/gns/.gitignore6
-rw-r--r--src/gns/Makefile.am18
-rw-r--r--src/gns/gnunet-gns-proxy-setup-ca.in (renamed from src/gns/gnunet-gns-proxy-setup-ca)9
-rw-r--r--src/gns/gnunet-gns-proxy.c7
-rw-r--r--src/gns/openssl.cnf245
-rw-r--r--src/gns/test_gns_nick_shorten.conf24
-rwxr-xr-xsrc/gns/test_gns_rel_expiration.sh7
7 files changed, 281 insertions, 35 deletions
diff --git a/src/gns/.gitignore b/src/gns/.gitignore
index 2b9a18f21..3bbb2eb3d 100644
--- a/src/gns/.gitignore
+++ b/src/gns/.gitignore
@@ -4,3 +4,9 @@ gnunet-dns2gns
4gnunet-gns 4gnunet-gns
5gnunet-gns-proxy 5gnunet-gns-proxy
6gnunet-gns-benchmark 6gnunet-gns-benchmark
7test_gns_proxy
8local.crt
9local.der
10local.key
11server.csr
12gnunet-gns-proxy-setup-ca
diff --git a/src/gns/Makefile.am b/src/gns/Makefile.am
index 1abc57d57..434d50f34 100644
--- a/src/gns/Makefile.am
+++ b/src/gns/Makefile.am
@@ -14,7 +14,8 @@ EXTRA_DIST = \
14 test_gns_simple_lookup.conf \ 14 test_gns_simple_lookup.conf \
15 gns-helper-service-w32.conf \ 15 gns-helper-service-w32.conf \
16 w32nsp.def \ 16 w32nsp.def \
17 gnunet-gns-proxy-setup-ca \ 17 openssl.cnf \
18 gnunet-gns-proxy-setup-ca.in \
18 zonefiles/J7POEUT41A8PBFS7KVVDRF88GBOU4HK8PSU5QKVLVE3R9T91E99G.zkey \ 19 zonefiles/J7POEUT41A8PBFS7KVVDRF88GBOU4HK8PSU5QKVLVE3R9T91E99G.zkey \
19 zonefiles/OEFL7A4VEF1B40QLEMTG5D8G1CN6EN16QUSG5R2DT71GRJN34LSG.zkey \ 20 zonefiles/OEFL7A4VEF1B40QLEMTG5D8G1CN6EN16QUSG5R2DT71GRJN34LSG.zkey \
20 zonefiles/test_zonekey \ 21 zonefiles/test_zonekey \
@@ -79,19 +80,30 @@ bin_PROGRAMS = \
79noinst_PROGRAMS = \ 80noinst_PROGRAMS = \
80 gnunet-gns-benchmark 81 gnunet-gns-benchmark
81 82
83pkgdata_DATA = \
84 openssl.cnf
85
82if HAVE_MHD 86if HAVE_MHD
83if LINUX 87if LINUX
84bin_PROGRAMS += gnunet-bcd 88bin_PROGRAMS += gnunet-bcd
85endif 89endif
86endif 90endif
87 91
88bin_SCRIPTS = gnunet-gns-proxy-setup-ca
89
90plugin_LTLIBRARIES = \ 92plugin_LTLIBRARIES = \
91 libgnunet_plugin_block_gns.la \ 93 libgnunet_plugin_block_gns.la \
92 libgnunet_plugin_gnsrecord_gns.la 94 libgnunet_plugin_gnsrecord_gns.la
93 95
94 96
97bin_SCRIPTS = \
98 gnunet-gns-proxy-setup-ca
99
100# See: https://www.gnu.org/software/automake/manual/html_node/Scripts.html#Scripts
101do_subst = sed -e 's,[@]pkgdatadir[@],$(pkgdatadir),g'
102
103gnunet-gns-proxy-setup-ca: gnunet-gns-proxy-setup-ca.in Makefile
104 $(do_subst) < $(srcdir)/gnunet-gns-proxy-setup-ca.in > gnunet-gns-proxy-setup-ca
105 chmod +x gnunet-gns-proxy-setup-ca
106
95libgnunet_plugin_gnsrecord_gns_la_SOURCES = \ 107libgnunet_plugin_gnsrecord_gns_la_SOURCES = \
96 plugin_gnsrecord_gns.c 108 plugin_gnsrecord_gns.c
97libgnunet_plugin_gnsrecord_gns_la_LIBADD = \ 109libgnunet_plugin_gnsrecord_gns_la_LIBADD = \
diff --git a/src/gns/gnunet-gns-proxy-setup-ca b/src/gns/gnunet-gns-proxy-setup-ca.in
index 7c1d58dc2..0a6fab18a 100644
--- a/src/gns/gnunet-gns-proxy-setup-ca
+++ b/src/gns/gnunet-gns-proxy-setup-ca.in
@@ -3,15 +3,13 @@
3# and install it (for both GNUnet and your browser). 3# and install it (for both GNUnet and your browser).
4# 4#
5 5
6# TODO: We should sed the real paths to the binaries involved here. 6OPENSSLCFG=@pkgdatadir@/openssl.cnf
7
8if ! which openssl > /dev/null 7if ! which openssl > /dev/null
9then 8then
10 echo "'openssl' command not found. Please install it." 9 echo "'openssl' command not found. Please install it."
11 exit 1 10 exit 1
12fi 11fi
13 12
14
15echo "Generating CA" 13echo "Generating CA"
16options='' 14options=''
17while getopts "c:" opt; do 15while getopts "c:" opt; do
@@ -36,7 +34,7 @@ GNSCANO=`mktemp /tmp/gnscakeynoencXXXXXX.pem`
36GNS_CA_CERT_PEM=`gnunet-config -s gns-proxy -o PROXY_CACERT -f $options` 34GNS_CA_CERT_PEM=`gnunet-config -s gns-proxy -o PROXY_CACERT -f $options`
37mkdir -p `dirname $GNS_CA_CERT_PEM` 35mkdir -p `dirname $GNS_CA_CERT_PEM`
38 36
39openssl req -new -x509 -days 3650 -extensions v3_ca -keyout $GNSCAKY -out $GNSCERT -subj "/C=ZZ/L=World/O=GNU/OU=GNUnet/CN=GNS Proxy CA/emailAddress=bounce@gnunet.org" -passout pass:"GNU Name System" 37openssl req -config $OPENSSLCFG -new -x509 -days 3650 -extensions v3_ca -keyout $GNSCAKY -out $GNSCERT -subj "/C=ZZ/L=World/O=GNU/OU=GNUnet/CN=GNS Proxy CA/emailAddress=bounce@gnunet.org" -passout pass:"GNU Name System"
40 38
41echo "Removing passphrase from key" 39echo "Removing passphrase from key"
42openssl rsa -passin pass:"GNU Name System" -in $GNSCAKY -out $GNSCANO 40openssl rsa -passin pass:"GNU Name System" -in $GNSCAKY -out $GNSCANO
@@ -46,7 +44,8 @@ cat $GNSCERT $GNSCANO > $GNS_CA_CERT_PEM
46 44
47if ! which certutil > /dev/null 45if ! which certutil > /dev/null
48then 46then
49 echo "'certutil' command not found. Not importing into browsers." 47 echo "The 'certutil' command was not found. Not importing into browsers."
48 echo "For 'certutil' install nss."
50else 49else
51 echo "Importing CA into browsers" 50 echo "Importing CA into browsers"
52 for f in ~/.mozilla/firefox/*.*/ 51 for f in ~/.mozilla/firefox/*.*/
diff --git a/src/gns/gnunet-gns-proxy.c b/src/gns/gnunet-gns-proxy.c
index 21451651d..65a7b6018 100644
--- a/src/gns/gnunet-gns-proxy.c
+++ b/src/gns/gnunet-gns-proxy.c
@@ -972,7 +972,7 @@ check_ssl_certificate (struct Socks5Request *s5r)
972 if (CURLE_OK != 972 if (CURLE_OK !=
973 curl_easy_getinfo (s5r->curl, 973 curl_easy_getinfo (s5r->curl,
974 CURLINFO_TLS_SESSION, 974 CURLINFO_TLS_SESSION,
975 (struct curl_slist **) &tlsinfo)) 975 &tlsinfo))
976 return GNUNET_SYSERR; 976 return GNUNET_SYSERR;
977 if (CURLSSLBACKEND_GNUTLS != tlsinfo->backend) 977 if (CURLSSLBACKEND_GNUTLS != tlsinfo->backend)
978 { 978 {
@@ -2045,11 +2045,12 @@ create_response (void *cls,
2045 const char *us; 2045 const char *us;
2046 long upload_size; 2046 long upload_size;
2047 2047
2048 upload_size = 0;
2048 us = MHD_lookup_connection_value (con, 2049 us = MHD_lookup_connection_value (con,
2049 MHD_HEADER_KIND, 2050 MHD_HEADER_KIND,
2050 MHD_HTTP_HEADER_CONTENT_LENGTH); 2051 MHD_HTTP_HEADER_CONTENT_LENGTH);
2051 if ( (NULL != us) && 2052 if ( (NULL != us) &&
2052 (1 == sscanf (us, 2053 (1 == sscanf (us,
2053 "%ld", 2054 "%ld",
2054 &upload_size)) && 2055 &upload_size)) &&
2055 (upload_size >= 0) ) 2056 (upload_size >= 0) )
@@ -2149,7 +2150,7 @@ create_response (void *cls,
2149 curl_easy_setopt (s5r->curl, 2150 curl_easy_setopt (s5r->curl,
2150 CURLOPT_USE_SSL, 2151 CURLOPT_USE_SSL,
2151 CURLUSESSL_ALL); 2152 CURLUSESSL_ALL);
2152 if (NULL != s5r->dane_data) 2153 if (0 < s5r->num_danes)
2153 curl_easy_setopt (s5r->curl, 2154 curl_easy_setopt (s5r->curl,
2154 CURLOPT_SSL_VERIFYPEER, 2155 CURLOPT_SSL_VERIFYPEER,
2155 0L); 2156 0L);
diff --git a/src/gns/openssl.cnf b/src/gns/openssl.cnf
new file mode 100644
index 000000000..503460f9f
--- /dev/null
+++ b/src/gns/openssl.cnf
@@ -0,0 +1,245 @@
1#
2# OpenSSL example configuration file.
3# This is mostly being used for generation of certificate requests.
4#
5
6# This definition stops the following lines choking if HOME isn't
7# defined.
8HOME = .
9RANDFILE = $ENV::HOME/.rnd
10
11# Extra OBJECT IDENTIFIER info:
12#oid_file = $ENV::HOME/.oid
13oid_section = new_oids
14
15# To use this configuration file with the "-extfile" option of the
16# "openssl x509" utility, name here the section containing the
17# X.509v3 extensions to use:
18# extensions =
19# (Alternatively, use a configuration file that has only
20# X.509v3 extensions in its main [= default] section.)
21
22[ new_oids ]
23
24# We can add new OIDs in here for use by 'ca' and 'req'.
25# Add a simple OID like this:
26# testoid1=1.2.3.4
27# Or use config file substitution like this:
28# testoid2=${testoid1}.5.6
29
30####################################################################
31[ ca ]
32default_ca = CA_default # The default ca section
33
34####################################################################
35[ CA_default ]
36
37dir = ./demoCA # Where everything is kept
38certs = $dir/certs # Where the issued certs are kept
39crl_dir = $dir/crl # Where the issued crl are kept
40database = $dir/index.txt # database index file.
41new_certs_dir = $dir/newcerts # default place for new certs.
42
43certificate = $dir/cacert.pem # The CA certificate
44serial = $dir/serial # The current serial number
45crl = $dir/crl.pem # The current CRL
46private_key = $dir/private/cakey.pem# The private key
47RANDFILE = $dir/private/.rand # private random number file
48
49x509_extensions = usr_cert # The extentions to add to the cert
50
51# Extensions to add to a CRL. Note: Netscape communicator chokes on V2 CRLs
52# so this is commented out by default to leave a V1 CRL.
53# crl_extensions = crl_ext
54
55default_days = 365 # how long to certify for
56default_crl_days= 30 # how long before next CRL
57default_md = md5 # which md to use.
58preserve = no # keep passed DN ordering
59
60# A few difference way of specifying how similar the request should look
61# For type CA, the listed attributes must be the same, and the optional
62# and supplied fields are just that :-)
63policy = policy_match
64
65# For the CA policy
66[ policy_match ]
67countryName = match
68stateOrProvinceName = match
69organizationName = match
70organizationalUnitName = optional
71commonName = supplied
72emailAddress = optional
73
74# For the 'anything' policy
75# At this point in time, you must list all acceptable 'object'
76# types.
77[ policy_anything ]
78countryName = optional
79stateOrProvinceName = optional
80localityName = optional
81organizationName = optional
82organizationalUnitName = optional
83commonName = supplied
84emailAddress = optional
85
86####################################################################
87[ req ]
88default_bits = 1024
89default_keyfile = privkey.pem
90distinguished_name = req_distinguished_name
91attributes = req_attributes
92x509_extensions = v3_ca # The extentions to add to the self signed cert
93
94# Passwords for private keys if not present they will be prompted for
95# input_password = secret
96# output_password = secret
97
98# This sets a mask for permitted string types. There are several options.
99# default: PrintableString, T61String, BMPString.
100# pkix : PrintableString, BMPString.
101# utf8only: only UTF8Strings.
102# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings).
103# MASK:XXXX a literal mask value.
104# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings
105# so use this option with caution!
106string_mask = nombstr
107
108# req_extensions = v3_req # The extensions to add to a certificate request
109
110[ req_distinguished_name ]
111countryName = Country Name (2 letter code)
112countryName_default = AU
113countryName_min = 2
114countryName_max = 2
115
116stateOrProvinceName = State or Province Name (full name)
117stateOrProvinceName_default = Some-State
118
119localityName = Locality Name (eg, city)
120
1210.organizationName = Organization Name (eg, company)
1220.organizationName_default = Internet Widgits Pty Ltd
123
124# we can do this but it is not needed normally :-)
125#1.organizationName = Second Organization Name (eg, company)
126#1.organizationName_default = World Wide Web Pty Ltd
127
128organizationalUnitName = Organizational Unit Name (eg, section)
129#organizationalUnitName_default =
130
131commonName = Common Name (eg, YOUR name)
132commonName_max = 64
133
134emailAddress = Email Address
135emailAddress_max = 40
136
137# SET-ex3 = SET extension number 3
138
139[ req_attributes ]
140challengePassword = A challenge password
141challengePassword_min = 4
142challengePassword_max = 20
143
144unstructuredName = An optional company name
145
146[ usr_cert ]
147
148# These extensions are added when 'ca' signs a request.
149
150# This goes against PKIX guidelines but some CAs do it and some software
151# requires this to avoid interpreting an end user certificate as a CA.
152
153basicConstraints=CA:FALSE
154
155# Here are some examples of the usage of nsCertType. If it is omitted
156# the certificate can be used for anything *except* object signing.
157
158# This is OK for an SSL server.
159# nsCertType = server
160
161# For an object signing certificate this would be used.
162# nsCertType = objsign
163
164# For normal client use this is typical
165# nsCertType = client, email
166
167# and for everything including object signing:
168# nsCertType = client, email, objsign
169
170# This is typical in keyUsage for a client certificate.
171# keyUsage = nonRepudiation, digitalSignature, keyEncipherment
172
173# This will be displayed in Netscape's comment listbox.
174nsComment = "OpenSSL Generated Certificate"
175
176# PKIX recommendations harmless if included in all certificates.
177subjectKeyIdentifier=hash
178authorityKeyIdentifier=keyid,issuer:always
179
180# This stuff is for subjectAltName and issuerAltname.
181# Import the email address.
182# subjectAltName=email:copy
183
184# Copy subject details
185# issuerAltName=issuer:copy
186
187#nsCaRevocationUrl = http://www.domain.dom/ca-crl.pem
188#nsBaseUrl
189#nsRevocationUrl
190#nsRenewalUrl
191#nsCaPolicyUrl
192#nsSslServerName
193
194[ v3_req ]
195
196# Extensions to add to a certificate request
197
198basicConstraints = CA:FALSE
199keyUsage = nonRepudiation, digitalSignature, keyEncipherment
200
201[ v3_ca ]
202
203
204# Extensions for a typical CA
205
206
207# PKIX recommendation.
208
209subjectKeyIdentifier=hash
210
211authorityKeyIdentifier=keyid:always,issuer:always
212
213# This is what PKIX recommends but some broken software chokes on critical
214# extensions.
215#basicConstraints = critical,CA:true
216# So we do this instead.
217basicConstraints = CA:true
218
219# Key usage: this is typical for a CA certificate. However since it will
220# prevent it being used as an test self-signed certificate it is best
221# left out by default.
222# keyUsage = cRLSign, keyCertSign
223
224# Some might want this also
225# nsCertType = sslCA, emailCA
226
227# Include email address in subject alt name: another PKIX recommendation
228# subjectAltName=email:copy
229# Copy issuer details
230# issuerAltName=issuer:copy
231
232# DER hex encoding of an extension: beware experts only!
233# obj=DER:02:03
234# Where 'obj' is a standard or added object
235# You can even override a supported extension:
236# basicConstraints= critical, DER:30:03:01:01:FF
237
238[ crl_ext ]
239
240# CRL extensions.
241# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL.
242
243# issuerAltName=issuer:copy
244authorityKeyIdentifier=keyid:always,issuer:always
245
diff --git a/src/gns/test_gns_nick_shorten.conf b/src/gns/test_gns_nick_shorten.conf
deleted file mode 100644
index 317477c80..000000000
--- a/src/gns/test_gns_nick_shorten.conf
+++ /dev/null
@@ -1,24 +0,0 @@
1@INLINE@ test_gns_defaults.conf
2
3[PATHS]
4GNUNET_TEST_HOME = $GNUNET_TMP/test-gnunet-gns-peer-1/
5
6[dht]
7START_ON_DEMAND = YES
8
9[transport]
10PLUGINS =
11
12[gns]
13#PREFIX = valgrind --leak-check=full --track-origins=yes
14START_ON_DEMAND = YES
15AUTO_IMPORT_PKEY = YES
16MAX_PARALLEL_BACKGROUND_QUERIES = 10
17DEFAULT_LOOKUP_TIMEOUT = 15 s
18RECORD_PUT_INTERVAL = 1 h
19ZONE_PUBLISH_TIME_WINDOW = 1 h
20DNS_ROOT=PD67SGHF3E0447TU9HADIVU9OM7V4QHTOG0EBU69TFRI2LG63DR0
21#USE_CACHE = NO
22
23[revocation]
24WORKBITS = 1
diff --git a/src/gns/test_gns_rel_expiration.sh b/src/gns/test_gns_rel_expiration.sh
index 66adbb631..c7c66bc27 100755
--- a/src/gns/test_gns_rel_expiration.sh
+++ b/src/gns/test_gns_rel_expiration.sh
@@ -7,6 +7,13 @@ if [ -z $LOCATION ]
7then 7then
8 LOCATION="gnunet-config" 8 LOCATION="gnunet-config"
9fi 9fi
10
11if [ -z $(which timeout) ]
12then
13 echo "timeout utility not found which is required for test."
14 exit 77
15fi
16
10$LOCATION --version 1> /dev/null 17$LOCATION --version 1> /dev/null
11if test $? != 0 18if test $? != 0
12then 19then