2 This file is part of GNUnet.
3 (C) 2011, 2013 Christian Grothoff (and other contributing authors)
5 GNUnet is free software; you can redistribute it and/or modify
6 it under the terms of the GNU General Public License as published
7 by the Free Software Foundation; either version 3, or (at your
8 option) any later version.
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 General Public License for more details.
15 You should have received a copy of the GNU General Public License
16 along with GNUnet; see the file COPYING. If not, write to the
17 Free Software Foundation, Inc., 59 Temple Place - Suite 330,
18 Boston, MA 02111-1307, USA.
22 * @file transport/gnunet-transport-certificate-creation.c
23 * @brief create certificate for HTTPS transport
27 #include "gnunet_util_lib.h"
31 * Turn the given file descriptor in to '/dev/null'.
33 * @param fd fd to bind to /dev/null
34 * @param flags flags to use (O_RDONLY or O_WRONLY)
37 make_dev_zero (int fd,
42 GNUNET_assert (0 == close (fd));
43 z = open ("/dev/null", flags);
44 GNUNET_assert (-1 != z);
48 GNUNET_assert (0 == close (z));
54 removecerts (const char *file1,
57 if (GNUNET_YES == GNUNET_DISK_file_test (file1))
59 if (0 != CHMOD (file1, S_IWUSR | S_IRUSR))
60 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "chmod", file1);
61 if (0 != REMOVE (file1))
62 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "remove", file1);
64 if (GNUNET_YES == GNUNET_DISK_file_test (file2))
66 if (0 != CHMOD (file2, S_IWUSR | S_IRUSR))
67 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "chmod", file2);
68 if (0 != REMOVE (file2))
69 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "remove", file2);
75 main (int argc, char **argv)
77 struct GNUNET_OS_Process *openssl;
82 "Invalid arguments.\n");
85 removecerts (argv[1], argv[2]);
86 (void) GNUNET_DISK_directory_create_for_file (argv[1]);
87 (void) GNUNET_DISK_directory_create_for_file (argv[2]);
88 /* eliminate stderr */
92 make_dev_zero (2, O_WRONLY);
94 /* Create RSA Private Key */
95 /* openssl genrsa -out $1 1024 2> /dev/null */
97 GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "openssl", "openssl", "genrsa",
98 "-out", argv[1], "1024", NULL);
102 "Failed to run openssl. Is openssl installed?\n");
105 GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (openssl));
106 GNUNET_OS_process_destroy (openssl);
108 /* Create a self-signed certificate in batch mode using rsa key */
109 /* openssl req -batch -days 365 -out $2 -new -x509 -key $1 2> /dev/null */
111 GNUNET_OS_start_process (GNUNET_NO, GNUNET_OS_INHERIT_STD_OUT_AND_ERR, NULL, NULL, "openssl", "openssl", "req",
112 "-batch", "-days", "365", "-out", argv[2],
113 "-new", "-x509", "-key", argv[1], NULL);
117 "Failed to create self-signed certificate with openssl.\n");
120 GNUNET_assert (GNUNET_OK == GNUNET_OS_process_wait (openssl));
121 GNUNET_OS_process_destroy (openssl);
122 if (0 != CHMOD (argv[1], S_IRUSR))
123 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "chmod", argv[1]);
124 if (0 != CHMOD (argv[2], S_IRUSR))
125 GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_WARNING, "chmod", argv[2]);
129 /* end of gnunet-transport-certificate-creation.c */