<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pl-pl">
<link rel="self" type="application/atom+xml" href="https://forum.atnel.pl/feed.php?f=48&amp;t=10574&amp;mode" />

<title>ATNEL tech-forum</title>
<link href="https://forum.atnel.pl/index.php" />
<updated>2015-02-11T21:21:24+01:00</updated>

<author><name><![CDATA[ATNEL tech-forum]]></name></author>
<id>https://forum.atnel.pl/feed.php?f=48&amp;t=10574&amp;mode</id>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2015-02-11T21:21:24+01:00</updated>
<published>2015-02-11T21:21:24+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118454#p118454</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118454#p118454"/>
<title type="html"><![CDATA[Re: [Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118454#p118454"><![CDATA[
Bardzo dziękuję za pomoc. Przerobiłem kod, podpierając się podanymi przykładami i podesłanym kursem.<br />Przy okazji zauważyłem błąd przy SSL_accept() - instrukcja warunkowa sprawdzała wystąpienie niepoprawnej wartości, przez co przeoczane było wystąpienie błędu.<br /><br />Podczas normalnego połączenia program działa poprawnie. Zauważyłem jednak, że zaczyna się dziać coś dziwnego, gdy próbuję połączyć się z nim normalnie, przez telnet (bez SSL). Połączenie zostaje zestawone, po wysłaniu pierwszego komunikatu dostaję informację o błędzie z połączeniem SSL, ale samo połączenie nie zostaje przerwane - mogę dalej wklepywać tekst w kliencie telnmetu - musze dopiero sam zamknąć połączenie od strony klienta. Na tym jednak nie koniec - serwer przestaje po tym przyjmować kolejne połączenia (connection timeout).<br />Ktoś ma jakiś pomysł odnośnie tego, czego brakuje?<br /><br />Na chwilę obecną kod wygląda tak:<br /><br />[syntax=c]#include &lt;stdlib.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt; /* memset() */<br />#include &lt;sys/socket.h&gt;<br />#include &lt;netinet/in.h&gt;<br />#include &lt;arpa/inet.h&gt;<br />#include &lt;unistd.h&gt;<br />#include &lt;signal.h&gt;<br />#include &lt;sys/wait.h&gt;<br />#include &lt;netdb.h&gt;<br />#include &quot;openssl/ssl.h&quot;<br />#include &quot;openssl/err.h&quot;<br /><br />#define PORT    32001 /* Port to listen on */<br />#define BACKLOG     10  /* Passed to listen() */<br />#define CLIENT_BUF_SIZE 100<br /><br />/* Signal handler to reap zombie processes */<br />void sigchld_handler(int s) {<br />while(wait(NULL) &gt; 0);<br />}<br /><br /><br />SSL_CTX* InitServerCTX(void) {<br />const SSL_METHOD *method;<br />SSL_CTX *ctx;<br /><br />OpenSSL_add_all_algorithms();/* load &amp; register all cryptos, etc. */<br />SSL_load_error_strings();/* load all error messages */<br />method = SSLv3_server_method();/* create new server-method instance */<br />ctx = SSL_CTX_new(method);/* create new context from method */<br />if ( ctx == NULL ) {<br />printf(&quot;ERROR CTX!\r\n&quot;);<br />}<br />return ctx;<br />}<br /><br /><br />void LoadCertificates(SSL_CTX* ctx, char* CertFile, char* KeyFile)<br />{<br />    //New lines <br />    if (SSL_CTX_load_verify_locations(ctx, CertFile, KeyFile) != 1)<br />        ERR_print_errors_fp(stderr);<br /><br />    if (SSL_CTX_set_default_verify_paths(ctx) != 1)<br />        ERR_print_errors_fp(stderr);<br />    //End new lines<br /><br />    /* set the local certificate from CertFile */<br />    if (SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM) &lt;= 0)<br />    {<br />        ERR_print_errors_fp(stderr);<br />        abort();<br />    }<br />    /* set the private key from KeyFile (may be the same as CertFile) */<br />    if (SSL_CTX_use_PrivateKey_file(ctx, KeyFile, SSL_FILETYPE_PEM) &lt;= 0)<br />    {<br />        ERR_print_errors_fp(stderr);<br />        abort();<br />    }<br />    /* verify private key */<br />    if (!SSL_CTX_check_private_key(ctx))<br />    {<br />        fprintf(stderr, &quot;Private key does not match the public certificate\n&quot;);<br />        abort();<br />    }<br /><br />    //New lines - Force the client-side have a certificate<br />//    SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, NULL);<br />//    SSL_CTX_set_verify_depth(ctx, 4);<br />    //End new lines<br />}<br /><br /><br />void ShowCerts(SSL* ssl)<br />{   X509 *cert;<br />    char *line;<br /><br />    cert = SSL_get_peer_certificate(ssl); /* Get certificates (if available) */<br />    if ( cert != NULL )<br />    {<br />        printf(&quot;Server certificates:\n&quot;);<br />        line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);<br />        printf(&quot;Subject: %s\n&quot;, line);<br />        free(line);<br />        line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);<br />        printf(&quot;Issuer: %s\n&quot;, line);<br />        free(line);<br />        X509_free(cert);<br />    }<br />    else<br />        printf(&quot;No certificates.\n&quot;);<br />}<br /><br /><br />int main(void) {<br /><br />SSL_CTX *ctx;<br /><br />char CertFile&#91;&#93; = &quot;/home/hypatia/ssl/cert.pem&quot;;<br />char KeyFile&#91;&#93; = &quot;/home/hypatia/ssl/key.pem&quot;;<br /><br />int sock;<br />struct sigaction sa;<br />struct sockaddr_in my_addr;<br />int reuseaddr = 1; /* True */<br /><br />SSL_library_init();<br />ctx = InitServerCTX();        /* initialize SSL */<br />LoadCertificates(ctx, CertFile, KeyFile); /* load certs */<br /><br />/* Get the address info */<br />memset(&amp;my_addr, 0x00, sizeof(my_addr));<br />my_addr.sin_family = AF_INET; // host byte order<br />my_addr.sin_port = htons(PORT); // short, network byte order<br />my_addr.sin_addr.s_addr = INADDR_ANY; // uzupełnij moim adresem IP<br /><br /><br />/* Create the socket */<br />sock = socket(AF_INET, SOCK_STREAM, 0);<br />if (sock == -1) {<br />perror(&quot;socket&quot;);<br />return 1;<br />}<br /><br />/* Enable the socket to reuse the address */<br />if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &amp;reuseaddr, sizeof(int)) == -1) {<br />perror(&quot;setsockopt&quot;);<br />return 1;<br />}<br /><br />/* Bind to the address */<br />if (bind(sock, (struct sockaddr *)&amp;my_addr, sizeof(struct sockaddr)) == -1) {<br />perror(&quot;bind&quot;);<br />return 1;<br />}<br /><br />/* Listen */<br />if (listen(sock, BACKLOG) == -1) {<br />perror(&quot;listen&quot;);<br />return 1;<br />}<br /><br />/* Set up the signal handler */<br />sa.sa_handler = sigchld_handler; // zbierz martwe procesy<br />sigemptyset(&amp;sa.sa_mask);<br />sa.sa_flags = SA_RESTART;<br />if (sigaction(SIGCHLD, &amp;sa, NULL) == -1) {<br />perror(&quot;sigaction&quot;);<br />return 1;<br />}<br /><br /><br />/* Main loop */<br />while (1) {<br />struct sockaddr_in their_addr;<br />size_t size = sizeof(struct sockaddr_in);<br />int newsock = accept(sock, (struct sockaddr*)&amp;their_addr, &amp;size);<br />int pid;<br /><br />if (newsock == -1) {<br />perror(&quot;accept&quot;);<br />return 0;<br />}<br />else {<br />printf(&quot;Got a connection from %s on port %d\n&quot;, inet_ntoa(their_addr.sin_addr), htons(their_addr.sin_port));<br />pid = fork();<br />if (pid == 0) {<br />/* In child process */<br />SSL *ssl;<br />char *buffer;<br />int received = 0;<br /><br />ssl = SSL_new(ctx);              /* get new SSL state with context */<br />SSL_set_fd(ssl, newsock);      /* set connection socket to SSL state */<br /><br />buffer = malloc(CLIENT_BUF_SIZE);<br />if (buffer == NULL) {<br />printf(&quot;Malloc error\r\n&quot;);<br />exit(0);<br />}<br />   <br />memset (buffer, 0x00, CLIENT_BUF_SIZE);<br /><br />close(sock);<br /><br />if ( SSL_accept(ssl) != 1) {<br />printf(&quot;SSL accept error\r\n&quot;);<br />exit(0);<br />}<br />else {<br />ShowCerts(ssl);        /* get any certificates */<br />}<br /><br />SSL_write(ssl, &quot;Hello client!\r\n&quot;, 15);<br /><br />while (1) {<br />//handle<br />if (received = SSL_read(ssl, buffer, (CLIENT_BUF_SIZE-1))) {<br />buffer&#91;received&#93; = '\0';<br />printf(&quot;Odebralem nastepujaca tresc: %s\r\n&quot;, buffer);<br />}<br />}<br />SSL_free(ssl);<br />close(newsock);<br />free(buffer);<br />return 0;<br />}<br />else {<br />/* Parent process */<br />if (pid == -1) {<br />perror(&quot;fork&quot;);<br />return 1;<br />}<br />else {<br />//close(newsock);<br />}<br />}<br />}<br />}<br /><br />    close(sock);<br /><br />    return 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 11 lut 2015, o 21:21</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2015-02-10T09:31:16+01:00</updated>
<published>2015-02-10T09:31:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118152#p118152</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118152#p118152"/>
<title type="html"><![CDATA[Re: [Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118152#p118152"><![CDATA[
Ja polecam: &quot;Beej's Guide to Network Programming&quot;<br /><br /><!-- m --><a class="postlink" href="http://beej.us/guide/bgnet/" >http://beej.us/guide/bgnet/</a><!-- m --><br /><br />Gdzieś w sieci jest wersja przetłumaczona na PL.<br /><br /><strong><span style="color: #808000">------------------------ [ Dodano po: 8 minutach ]</span></strong><br /><br />Długo nie musiałem szukać:<br /><!-- m --><a class="postlink" href="http://cpp0x.pl/kursy/Kurs-WinSock-C++/271" >http://cpp0x.pl/kursy/Kurs-WinSock-C++/271</a><!-- m --><br /><!-- m --><a class="postlink" href="http://www.asawicki.info/Mirror/Beej_s%20Guide%20to%20Network%20Programming%20PL/bgnet.pdf" >http://www.asawicki.info/Mirror/Beej_s% ... /bgnet.pdf</a><!-- m --><p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 10 lut 2015, o 09:31</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2015-02-09T19:46:16+01:00</updated>
<published>2015-02-09T19:46:16+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118066#p118066</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118066#p118066"/>
<title type="html"><![CDATA[Re: [Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118066#p118066"><![CDATA[
<div class="quotetitle">PROTON napisał(a):</div><div class="quotecontent"><br />Sprawdzisz to tym:<br /><br />[syntax=bash]netstat -aepvt[/syntax]<br /></div><br /><br />Hmm...<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">tcp        0      0 localhost:32001         *:*                     LISTEN <br /></div><br /><br />Co zrobić, żeby słuchał także na eth0 i generalnie wszystkich innych interfejsach? O tym decyduje jakaś wartość podana w kodzie źródłowym?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 9 lut 2015, o 19:46</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2015-02-09T18:44:30+01:00</updated>
<published>2015-02-09T18:44:30+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118043#p118043</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118043#p118043"/>
<title type="html"><![CDATA[Re: [Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118043#p118043"><![CDATA[
Sprawdzisz to tym:<br /><br />[syntax=bash]netstat -aepvt[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 9 lut 2015, o 18:44</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2015-02-09T17:26:35+01:00</updated>
<published>2015-02-09T17:26:35+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118028#p118028</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118028#p118028"/>
<title type="html"><![CDATA[Re: [Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118028#p118028"><![CDATA[
<div class="quotetitle">PROTON napisał(a):</div><div class="quotecontent"><br />Na którym interfejsie demon nadsłuchuje? na eth czy na lo?<br /></div><br /><br />Hmm... Pytanie zabrzmi głupio, ale jak to sprawdzić?<br />Do tej pory byłem przekonany, że serwer przypisany do określonego socketu słucha na każdym dostępnym interfejsie i dopiero firewall blokuje niepożądane połączenia.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 9 lut 2015, o 17:26</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2015-02-09T15:19:17+01:00</updated>
<published>2015-02-09T15:19:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118012#p118012</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118012#p118012"/>
<title type="html"><![CDATA[Re: [Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=118012#p118012"><![CDATA[
Na którym interfejsie demon nadsłuchuje? na eth czy na lo?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 9 lut 2015, o 15:19</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2015-02-09T10:20:17+01:00</updated>
<published>2015-02-09T10:20:17+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117954#p117954</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117954#p117954"/>
<title type="html"><![CDATA[Re: [Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117954#p117954"><![CDATA[
<div class="quotetitle">squeez napisał(a):</div><div class="quotecontent"><br />Czy masz twój demon słucha na wszystkich interfejsach?<br /></div><br /><br />Hmm... Powinien. Nie widzę nigdzie ograniczenia w kodzie, chociaż z programowaniem Linuksa mam do czynienia od stosunkowo niedawna i w większości opieram się na przykładach z dokumentacji systemu i sieciowych tutoriali. Nie widzę jednak nigdzie w kodzie czegoś, co mogłoby blokować połączenia na innych interfejsach niż lo.<br /><br />[/quote]Jaki to numer portu oraz demon na prawach roota czy usera?[/quote]<br /><br />Port 32001.<br />Próbowałem zarówno na prawach usera jak i roota. Efekt zawsze taki sam.<br />Cały kod źródłowy wygląda następująco:<br /><br />[syntax=c]#include &lt;stdlib.h&gt;<br />#include &lt;stdio.h&gt;<br />#include &lt;string.h&gt; /* memset() */<br />#include &lt;sys/socket.h&gt;<br />#include &lt;netinet/in.h&gt;<br />#include &lt;arpa/inet.h&gt;<br />#include &lt;unistd.h&gt;<br />#include &lt;signal.h&gt;<br />#include &lt;sys/wait.h&gt;<br />#include &lt;netdb.h&gt;<br />#include &quot;openssl/ssl.h&quot;<br />#include &quot;openssl/err.h&quot;<br /><br />#define PORT    &quot;32001&quot; /* Port to listen on */<br />#define BACKLOG     10  /* Passed to listen() */<br />#define CLIENT_BUF_SIZE 100<br /><br />/* Signal handler to reap zombie processes */<br />static void wait_for_child(int sig) {<br />while (waitpid(-1, NULL, WNOHANG) &gt; 0);<br />}<br /><br /><br />SSL_CTX* InitServerCTX(void) {<br />const SSL_METHOD *method;<br />SSL_CTX *ctx;<br /><br />OpenSSL_add_all_algorithms();/* load &amp; register all cryptos, etc. */<br />SSL_load_error_strings();/* load all error messages */<br />method = SSLv3_server_method();/* create new server-method instance */<br />ctx = SSL_CTX_new(method);/* create new context from method */<br />if ( ctx == NULL ) {<br />printf(&quot;ERROR CTX!\r\n&quot;);<br />}<br />return ctx;<br />}<br /><br /><br />void LoadCertificates(SSL_CTX* ctx, char* CertFile, char* KeyFile)<br />{<br />    //New lines <br />    if (SSL_CTX_load_verify_locations(ctx, CertFile, KeyFile) != 1)<br />        ERR_print_errors_fp(stderr);<br /><br />    if (SSL_CTX_set_default_verify_paths(ctx) != 1)<br />        ERR_print_errors_fp(stderr);<br />    //End new lines<br /><br />    /* set the local certificate from CertFile */<br />    if (SSL_CTX_use_certificate_file(ctx, CertFile, SSL_FILETYPE_PEM) &lt;= 0)<br />    {<br />        ERR_print_errors_fp(stderr);<br />        abort();<br />    }<br />    /* set the private key from KeyFile (may be the same as CertFile) */<br />    if (SSL_CTX_use_PrivateKey_file(ctx, KeyFile, SSL_FILETYPE_PEM) &lt;= 0)<br />    {<br />        ERR_print_errors_fp(stderr);<br />        abort();<br />    }<br />    /* verify private key */<br />    if (!SSL_CTX_check_private_key(ctx))<br />    {<br />        fprintf(stderr, &quot;Private key does not match the public certificate\n&quot;);<br />        abort();<br />    }<br />}<br /><br /><br />void ShowCerts(SSL* ssl)<br />{   X509 *cert;<br />    char *line;<br /><br />    cert = SSL_get_peer_certificate(ssl); /* Get certificates (if available) */<br />    if ( cert != NULL )<br />    {<br />        printf(&quot;Server certificates:\n&quot;);<br />        line = X509_NAME_oneline(X509_get_subject_name(cert), 0, 0);<br />        printf(&quot;Subject: %s\n&quot;, line);<br />        free(line);<br />        line = X509_NAME_oneline(X509_get_issuer_name(cert), 0, 0);<br />        printf(&quot;Issuer: %s\n&quot;, line);<br />        free(line);<br />        X509_free(cert);<br />    }<br />    else<br />        printf(&quot;No certificates.\n&quot;);<br />}<br /><br /><br />int main(void) {<br /><br />SSL_CTX *ctx;<br /><br />char CertFile&#91;&#93; = &quot;/home/user/ssl/cert.pem&quot;;<br />char KeyFile&#91;&#93; = &quot;/home/user/ssl/key.pem&quot;;<br /><br />int sock;<br />struct sigaction sa;<br />struct addrinfo hints, *res;<br />int reuseaddr = 1; /* True */<br /><br />SSL_library_init();<br />ctx = InitServerCTX();        /* initialize SSL */<br />LoadCertificates(ctx, CertFile, KeyFile); /* load certs */<br /><br />/* Get the address info */<br />memset(&amp;hints, 0, sizeof hints);<br />hints.ai_family = AF_INET;<br />hints.ai_socktype = SOCK_STREAM;<br />if (getaddrinfo(NULL, PORT, &amp;hints, &amp;res) != 0) {<br />perror(&quot;getaddrinfo&quot;);<br />return 1;<br />}<br /><br />/* Create the socket */<br />sock = socket(res-&gt;ai_family, res-&gt;ai_socktype, res-&gt;ai_protocol);<br />if (sock == -1) {<br />perror(&quot;socket&quot;);<br />return 1;<br />}<br /><br />/* Enable the socket to reuse the address */<br />if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, &amp;reuseaddr, sizeof(int)) == -1) {<br />perror(&quot;setsockopt&quot;);<br />return 1;<br />}<br /><br />/* Bind to the address */<br />if (bind(sock, res-&gt;ai_addr, res-&gt;ai_addrlen) == -1) {<br />perror(&quot;bind&quot;);<br />return 1;<br />}<br /><br />/* Listen */<br />if (listen(sock, BACKLOG) == -1) {<br />perror(&quot;listen&quot;);<br />return 1;<br />}<br /><br />freeaddrinfo(res);<br /><br />/* Set up the signal handler */<br />sa.sa_handler = wait_for_child;<br />sigemptyset(&amp;sa.sa_mask);<br />sa.sa_flags = SA_RESTART;<br />if (sigaction(SIGCHLD, &amp;sa, NULL) == -1) {<br />perror(&quot;sigaction&quot;);<br />return 1;<br />    }<br /><br />/* Main loop */<br />while (1) {<br />struct sockaddr_in their_addr;<br />size_t size = sizeof(struct sockaddr_in);<br />int newsock = accept(sock, (struct sockaddr*)&amp;their_addr, &amp;size);<br />int pid;<br /><br />if (newsock == -1) {<br />perror(&quot;accept&quot;);<br />return 0;<br />}<br /><br />printf(&quot;Got a connection from %s on port %d\n&quot;, inet_ntoa(their_addr.sin_addr), htons(their_addr.sin_port));<br /><br />pid = fork();<br />if (pid == 0) {<br />/* In child process */<br />SSL *ssl;<br />char data = 0;<br />char *buffer;<br />int received = 0;<br /><br />ssl = SSL_new(ctx);              /* get new SSL state with context */<br />SSL_set_fd(ssl, newsock);      /* set connection socket to SSL state */<br /><br />buffer = malloc(CLIENT_BUF_SIZE);<br />if (buffer == NULL) {<br />printf(&quot;Malloc error\r\n&quot;);<br />return 0;<br />}<br />   <br />memset (buffer, 0x00, CLIENT_BUF_SIZE);<br />close(sock);<br /><br />if ( SSL_accept(ssl) == 0) {<br />printf(&quot;SSL accept error\r\n&quot;);<br />return 0;<br />}<br />else {<br />ShowCerts(ssl);        /* get any certificates */<br />}<br /><br />SSL_write(ssl, &quot;Hello client!\r\n&quot;, 15);<br /><br />            while (1) {<br />//handle<br />if (received = SSL_read(ssl, buffer, (CLIENT_BUF_SIZE-1))) {<br />buffer&#91;received&#93; = '\0';<br />printf(&quot;Odebralem nastepujaca tresc: %s\r\n&quot;, buffer);<br />}<br />}<br />SSL_free(ssl);<br />close(newsock);<br />free(buffer);<br />            return 0;<br />}<br />else {<br />/* Parent process */<br />if (pid == -1) {<br />perror(&quot;fork&quot;);<br />return 1;<br />}<br />else {<br />//close(newsock);<br />}<br />}<br />}<br /><br />    close(sock);<br /><br />    return 0;<br />}[/syntax]<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 9 lut 2015, o 10:20</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[PROTON]]></name></author>
<updated>2015-02-09T10:01:06+01:00</updated>
<published>2015-02-09T10:01:06+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117951#p117951</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117951#p117951"/>
<title type="html"><![CDATA[Re: [Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117951#p117951"><![CDATA[
Sprawdź neststatem jak nadsłuchuje.<br /><br />[syntax=bash]netstat -aepvt[/syntax]<br /><br />i wklej tu.<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=1315">PROTON</a> — 9 lut 2015, o 10:01</p><hr />
]]></content>
</entry>
<entry>
<author><name><![CDATA[Atlantis]]></name></author>
<updated>2015-02-09T08:53:27+01:00</updated>
<published>2015-02-09T08:53:27+01:00</published>
<id>https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117942#p117942</id>
<link href="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117942#p117942"/>
<title type="html"><![CDATA[[Linux]Brak połączenia z daemonem SSL]]></title>

<content type="html" xml:base="https://forum.atnel.pl/viewtopic.php?t=10574&amp;p=117942#p117942"><![CDATA[
Eksperymentuję właśnie z szyfrowaniem komunikacji za pomocą OpenSSL.<br />Napisałem własnego daemona, który nasłuchuje na określonym porcie.<br /><br />Mogę się z nim połączyć za pomocą ncata i przesyłać dane w obydwie strony:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ncat --ssl localhost &lt;port&gt;</div><br /><br />Problem w tym, że jest to możliwe tylko wtedy, gdy w poleceniu użyję nazwy &quot;localhost&quot;. W przypadku zastosowania numeru IP efekt jest następujący:<br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ncat --ssl &lt;numer IP&gt;&lt;port&gt;<br />Ncat: Connection refused.<br /></div><br /><br />Podobny komunikat dostaję przy próbie połączenia się z zewnątrz, za pomocą androidowego SSL clienta.<br /><br /><strong>I żeby nie było: a iptables jest dodana odpowiednia formułka:</strong><br /><br /><div class="codetitle"><b>Code:</b></div><div class="codecontent">ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:&lt;port&gt; state NEW</div><br /><br />Na tej samej maszynie pracuje również serwer https, z analogiczną formułką dla portu 443 i nie ma najmniejszego problemu, żeby się do niego dowołać z domowej sieci...<br /><br />Co może być nie tak?<p>Statystyki: Napisane przez <a href="https://forum.atnel.pl/memberlist.php?mode=viewprofile&amp;u=2174">Atlantis</a> — 9 lut 2015, o 08:53</p><hr />
]]></content>
</entry>
</feed>