Demo server using SSL_CTX_config
Reviewed-by: Richard Levitte <levitte@openssl.org>
This commit is contained in:
		
							
								
								
									
										24
									
								
								demos/bio/cmod.cnf
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								demos/bio/cmod.cnf
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,24 @@ | ||||
| # Example config module configuration | ||||
|  | ||||
| # Name supplied by application to CONF_modules_load_file | ||||
| # and section containing configuration | ||||
| testapp = test_sect | ||||
|  | ||||
| [test_sect] | ||||
| # list of confuration modules | ||||
|  | ||||
| # SSL configuration module | ||||
| ssl_conf = ssl_sect | ||||
|  | ||||
| [ssl_sect] | ||||
| # list of SSL configurations | ||||
| server = server_sect | ||||
|  | ||||
| [server_sect] | ||||
| # Only support 3 curves | ||||
| Curves = P-521:P-384:P-256 | ||||
| # Restricted signature algorithms | ||||
| SignatureAlgorithms = RSA+SHA512:ECDSA+SHA512 | ||||
| # Certificates and keys | ||||
| RSA.Certificate=server.pem | ||||
| ECDSA.Certificate=server-ec.pem | ||||
							
								
								
									
										94
									
								
								demos/bio/server-cmod.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										94
									
								
								demos/bio/server-cmod.c
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,94 @@ | ||||
| /* NOCW */ | ||||
| /* demos/bio/server-cmod.c */ | ||||
|  | ||||
| /* | ||||
|  * A minimal TLS server it ses SSL_CTX_config and a configuration file to | ||||
|  * set most server parameters. | ||||
|  */ | ||||
|  | ||||
| #include <stdio.h> | ||||
| #include <signal.h> | ||||
| #include <openssl/err.h> | ||||
| #include <openssl/ssl.h> | ||||
| #include <openssl/conf.h> | ||||
|  | ||||
| int main(int argc, char *argv[]) | ||||
| { | ||||
|     unsigned char buf[512]; | ||||
|     char *port = "*:4433"; | ||||
|     BIO *in = NULL; | ||||
|     BIO *ssl_bio, *tmp; | ||||
|     SSL_CTX *ctx; | ||||
|     int ret = 1, i; | ||||
|  | ||||
|     SSL_load_error_strings(); | ||||
|  | ||||
|     /* Add ciphers and message digests */ | ||||
|     OpenSSL_add_ssl_algorithms(); | ||||
|  | ||||
|     if (CONF_modules_load_file("cmod.cnf", "testapp", 0) <= 0) { | ||||
|         fprintf(stderr, "Error processing config file\n"); | ||||
|         goto err; | ||||
|     } | ||||
|  | ||||
|     ctx = SSL_CTX_new(TLS_server_method()); | ||||
|  | ||||
|     if (SSL_CTX_config(ctx, "server") == 0) { | ||||
|         fprintf(stderr, "Error configuring server.\n"); | ||||
|         goto err; | ||||
|     } | ||||
|  | ||||
|     /* Setup server side SSL bio */ | ||||
|     ssl_bio = BIO_new_ssl(ctx, 0); | ||||
|  | ||||
|     if ((in = BIO_new_accept(port)) == NULL) | ||||
|         goto err; | ||||
|  | ||||
|     /* | ||||
|      * This means that when a new connection is accepted on 'in', The ssl_bio | ||||
|      * will be 'duplicated' and have the new socket BIO push into it. | ||||
|      * Basically it means the SSL BIO will be automatically setup | ||||
|      */ | ||||
|     BIO_set_accept_bios(in, ssl_bio); | ||||
|  | ||||
|  again: | ||||
|     /* | ||||
|      * The first call will setup the accept socket, and the second will get a | ||||
|      * socket.  In this loop, the first actual accept will occur in the | ||||
|      * BIO_read() function. | ||||
|      */ | ||||
|  | ||||
|     if (BIO_do_accept(in) <= 0) | ||||
|         goto err; | ||||
|  | ||||
|     for (;;) { | ||||
|         i = BIO_read(in, buf, sizeof(buf)); | ||||
|         if (i == 0) { | ||||
|             /* | ||||
|              * If we have finished, remove the underlying BIO stack so the | ||||
|              * next time we call any function for this BIO, it will attempt | ||||
|              * to do an accept | ||||
|              */ | ||||
|             printf("Done\n"); | ||||
|             tmp = BIO_pop(in); | ||||
|             BIO_free_all(tmp); | ||||
|             goto again; | ||||
|         } | ||||
|         if (i < 0) { | ||||
|             if (BIO_should_retry(in)) | ||||
|                 continue; | ||||
|             goto err; | ||||
|         } | ||||
|         fwrite(buf, 1, i, stdout); | ||||
|         fflush(stdout); | ||||
|     } | ||||
|  | ||||
|     ret = 0; | ||||
|  err: | ||||
|     if (ret) { | ||||
|         ERR_print_errors_fp(stderr); | ||||
|     } | ||||
|     BIO_free(in); | ||||
|     exit(ret); | ||||
|     return (!ret); | ||||
| } | ||||
							
								
								
									
										17
									
								
								demos/bio/server-ec.pem
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								demos/bio/server-ec.pem
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,17 @@ | ||||
| -----BEGIN PRIVATE KEY----- | ||||
| MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQg/5kYU3PUlHwfdjEN | ||||
| lC1xTZEx3o55RgtSOuOCTryDfomhRANCAARW/qUFg+qZzjcFWrST4bmkRCFu8/rn | ||||
| KTHjW2vpBXYGXKDn4AbAfYXYhM9J7v1HkkrZBPPGx53eVzs61/Pgr6Rc | ||||
| -----END PRIVATE KEY----- | ||||
| -----BEGIN CERTIFICATE----- | ||||
| MIIBsTCCAVegAwIBAgIJALChLe0vZzgoMAoGCCqGSM49BAMCMDUxHzAdBgNVBAsM | ||||
| FlRlc3QgRUNEU0EgQ2VydGlmaWNhdGUxEjAQBgNVBAMMCWxvY2FsaG9zdDAeFw0x | ||||
| NTEyMjIxNDUxMDRaFw00NDAxMDQxNDUxMDRaMDUxHzAdBgNVBAsMFlRlc3QgRUNE | ||||
| U0EgQ2VydGlmaWNhdGUxEjAQBgNVBAMMCWxvY2FsaG9zdDBZMBMGByqGSM49AgEG | ||||
| CCqGSM49AwEHA0IABFb+pQWD6pnONwVatJPhuaREIW7z+ucpMeNba+kFdgZcoOfg | ||||
| BsB9hdiEz0nu/UeSStkE88bHnd5XOzrX8+CvpFyjUDBOMB0GA1UdDgQWBBROhkTJ | ||||
| lsm8Qd8pEgrrapccfFY5gjAfBgNVHSMEGDAWgBROhkTJlsm8Qd8pEgrrapccfFY5 | ||||
| gjAMBgNVHRMEBTADAQH/MAoGCCqGSM49BAMCA0gAMEUCIFhyU/WZRcihilTpwFVm | ||||
| fly1JhwisouiZjLnPkRYZVzHAiEAgqxXfRQl1/phnEgO9gRcv2nFp9xvJiDgKPse | ||||
| VktDYjE= | ||||
| -----END CERTIFICATE----- | ||||
		Reference in New Issue
	
	Block a user
	 Dr. Stephen Henson
					Dr. Stephen Henson