mirror of
				https://github.com/cuberite/polarssl.git
				synced 2025-10-30 03:00:21 -04:00 
			
		
		
		
	Add extendedKeyUsage checking in SSL modules
This commit is contained in:
		
							parent
							
								
									7afb8a0dca
								
							
						
					
					
						commit
						0408fd1fbb
					
				| @ -38,6 +38,11 @@ | |||||||
| #include "polarssl/debug.h" | #include "polarssl/debug.h" | ||||||
| #include "polarssl/ssl.h" | #include "polarssl/ssl.h" | ||||||
| 
 | 
 | ||||||
|  | #if defined(POLARSSL_X509_CRT_PARSE_C) && \ | ||||||
|  |     defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) | ||||||
|  | #include "polarssl/oid.h" | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
| #if defined(POLARSSL_PLATFORM_C) | #if defined(POLARSSL_PLATFORM_C) | ||||||
| #include "polarssl/platform.h" | #include "polarssl/platform.h" | ||||||
| #else | #else | ||||||
| @ -4770,15 +4775,19 @@ int ssl_check_cert_usage( const x509_crt *cert, | |||||||
|                           const ssl_ciphersuite_t *ciphersuite, |                           const ssl_ciphersuite_t *ciphersuite, | ||||||
|                           int cert_endpoint ) |                           int cert_endpoint ) | ||||||
| { | { | ||||||
| #if !defined(POLARSSL_X509_CHECK_KEY_USAGE) |  | ||||||
|     ((void) cert); |  | ||||||
|     ((void) ciphersuite); |  | ||||||
|     ((void) cert_endpoint); |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #if defined(POLARSSL_X509_CHECK_KEY_USAGE) | #if defined(POLARSSL_X509_CHECK_KEY_USAGE) | ||||||
|     int usage = 0; |     int usage = 0; | ||||||
| #endif | #endif | ||||||
|  | #if defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) | ||||||
|  |     const char *ext_oid; | ||||||
|  |     size_t ext_len; | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #if !defined(POLARSSL_X509_CHECK_KEY_USAGE) &&          \ | ||||||
|  |     !defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) | ||||||
|  |     ((void) cert); | ||||||
|  |     ((void) cert_endpoint); | ||||||
|  | #endif | ||||||
| 
 | 
 | ||||||
| #if defined(POLARSSL_X509_CHECK_KEY_USAGE) | #if defined(POLARSSL_X509_CHECK_KEY_USAGE) | ||||||
|     if( cert_endpoint == SSL_IS_SERVER ) |     if( cert_endpoint == SSL_IS_SERVER ) | ||||||
| @ -4818,8 +4827,26 @@ int ssl_check_cert_usage( const x509_crt *cert, | |||||||
| 
 | 
 | ||||||
|     if( x509_crt_check_key_usage( cert, usage ) != 0 ) |     if( x509_crt_check_key_usage( cert, usage ) != 0 ) | ||||||
|         return( -1 ); |         return( -1 ); | ||||||
|  | #else | ||||||
|  |     ((void) ciphersuite); | ||||||
| #endif /* POLARSSL_X509_CHECK_KEY_USAGE */ | #endif /* POLARSSL_X509_CHECK_KEY_USAGE */ | ||||||
| 
 | 
 | ||||||
|  | #if defined(POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE) | ||||||
|  |     if( cert_endpoint == SSL_IS_SERVER ) | ||||||
|  |     { | ||||||
|  |         ext_oid = OID_SERVER_AUTH; | ||||||
|  |         ext_len = OID_SIZE( OID_SERVER_AUTH ); | ||||||
|  |     } | ||||||
|  |     else | ||||||
|  |     { | ||||||
|  |         ext_oid = OID_CLIENT_AUTH; | ||||||
|  |         ext_len = OID_SIZE( OID_CLIENT_AUTH ); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     if( x509_crt_check_extended_key_usage( cert, ext_oid, ext_len ) != 0 ) | ||||||
|  |         return( -1 ); | ||||||
|  | #endif /* POLARSSL_X509_CHECK_EXTENDED_KEY_USAGE */ | ||||||
|  | 
 | ||||||
|     return( 0 ); |     return( 0 ); | ||||||
| } | } | ||||||
| #endif /* POLARSSL_X509_CRT_PARSE_C */ | #endif /* POLARSSL_X509_CRT_PARSE_C */ | ||||||
|  | |||||||
							
								
								
									
										107
									
								
								tests/ssl-opt.sh
									
									
									
									
									
								
							
							
						
						
									
										107
									
								
								tests/ssl-opt.sh
									
									
									
									
									
								
							| @ -1136,6 +1136,113 @@ run_test    "keyUsage cli-auth #5 (ECDSA, KeyAgreement: fail (soft))" \ | |||||||
|             -s "bad certificate (usage extensions)" \ |             -s "bad certificate (usage extensions)" \ | ||||||
|             -S "Processing of the Certificate handshake message failed" |             -S "Processing of the Certificate handshake message failed" | ||||||
| 
 | 
 | ||||||
|  | # Tests for extendedKeyUsage, part 1: server-side certificate/suite selection | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage srv #1 (serverAuth -> OK)" \ | ||||||
|  |             "$P_SRV key_file=data_files/server5.key \ | ||||||
|  |              crt_file=data_files/server5.eku-srv.crt" \ | ||||||
|  |             "$P_CLI" \ | ||||||
|  |             0 | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage srv #2 (serverAuth,clientAuth -> OK)" \ | ||||||
|  |             "$P_SRV key_file=data_files/server5.key \ | ||||||
|  |              crt_file=data_files/server5.eku-srv.crt" \ | ||||||
|  |             "$P_CLI" \ | ||||||
|  |             0 | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage srv #3 (codeSign,anyEKU -> OK)" \ | ||||||
|  |             "$P_SRV key_file=data_files/server5.key \ | ||||||
|  |              crt_file=data_files/server5.eku-cs_any.crt" \ | ||||||
|  |             "$P_CLI" \ | ||||||
|  |             0 | ||||||
|  | 
 | ||||||
|  | # add psk to leave an option for client to send SERVERQUIT | ||||||
|  | run_test    "extKeyUsage srv #4 (codeSign -> fail)" \ | ||||||
|  |             "$P_SRV psk=abc123 key_file=data_files/server5.key \ | ||||||
|  |              crt_file=data_files/server5.eku-cli.crt" \ | ||||||
|  |             "$P_CLI psk=badbad" \ | ||||||
|  |             1 | ||||||
|  | 
 | ||||||
|  | # Tests for extendedKeyUsage, part 2: client-side checking of server cert | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli #1 (serverAuth -> OK)" \ | ||||||
|  |             "$O_SRV -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-srv.crt" \ | ||||||
|  |             "$P_CLI debug_level=2" \ | ||||||
|  |             0 \ | ||||||
|  |             -C "bad certificate (usage extensions)" \ | ||||||
|  |             -C "Processing of the Certificate handshake message failed" \ | ||||||
|  |             -c "Ciphersuite is TLS-" | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli #2 (serverAuth,clientAuth -> OK)" \ | ||||||
|  |             "$O_SRV -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-srv_cli.crt" \ | ||||||
|  |             "$P_CLI debug_level=2" \ | ||||||
|  |             0 \ | ||||||
|  |             -C "bad certificate (usage extensions)" \ | ||||||
|  |             -C "Processing of the Certificate handshake message failed" \ | ||||||
|  |             -c "Ciphersuite is TLS-" | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli #3 (codeSign,anyEKU -> OK)" \ | ||||||
|  |             "$O_SRV -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-cs_any.crt" \ | ||||||
|  |             "$P_CLI debug_level=2" \ | ||||||
|  |             0 \ | ||||||
|  |             -C "bad certificate (usage extensions)" \ | ||||||
|  |             -C "Processing of the Certificate handshake message failed" \ | ||||||
|  |             -c "Ciphersuite is TLS-" | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli #4 (codeSign -> fail)" \ | ||||||
|  |             "$O_SRV -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-cs.crt" \ | ||||||
|  |             "$P_CLI debug_level=2" \ | ||||||
|  |             1 \ | ||||||
|  |             -c "bad certificate (usage extensions)" \ | ||||||
|  |             -c "Processing of the Certificate handshake message failed" \ | ||||||
|  |             -C "Ciphersuite is TLS-" | ||||||
|  | 
 | ||||||
|  | # Tests for extendedKeyUsage, part 3: server-side checking of client cert | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli-auth #1 (clientAuth -> OK)" \ | ||||||
|  |             "$P_SRV debug_level=2 auth_mode=optional" \ | ||||||
|  |             "$O_CLI -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-cli.crt" \ | ||||||
|  |             0 \ | ||||||
|  |             -S "bad certificate (usage extensions)" \ | ||||||
|  |             -S "Processing of the Certificate handshake message failed" | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli-auth #2 (serverAuth,clientAuth -> OK)" \ | ||||||
|  |             "$P_SRV debug_level=2 auth_mode=optional" \ | ||||||
|  |             "$O_CLI -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-srv_cli.crt" \ | ||||||
|  |             0 \ | ||||||
|  |             -S "bad certificate (usage extensions)" \ | ||||||
|  |             -S "Processing of the Certificate handshake message failed" | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli-auth #3 (codeSign,anyEKU -> OK)" \ | ||||||
|  |             "$P_SRV debug_level=2 auth_mode=optional" \ | ||||||
|  |             "$O_CLI -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-cs_any.crt" \ | ||||||
|  |             0 \ | ||||||
|  |             -S "bad certificate (usage extensions)" \ | ||||||
|  |             -S "Processing of the Certificate handshake message failed" | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli-auth #4 (codeSign -> fail (soft))" \ | ||||||
|  |             "$P_SRV debug_level=2 auth_mode=optional" \ | ||||||
|  |             "$O_CLI -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-cs.crt" \ | ||||||
|  |             0 \ | ||||||
|  |             -s "bad certificate (usage extensions)" \ | ||||||
|  |             -S "Processing of the Certificate handshake message failed" | ||||||
|  | 
 | ||||||
|  | run_test    "extKeyUsage cli-auth #4b (codeSign -> fail (hard))" \ | ||||||
|  |             "$P_SRV debug_level=2 auth_mode=required" \ | ||||||
|  |             "$O_CLI -key data_files/server5.key \ | ||||||
|  |              -cert data_files/server5.eku-cs.crt" \ | ||||||
|  |             1 \ | ||||||
|  |             -s "bad certificate (usage extensions)" \ | ||||||
|  |             -s "Processing of the Certificate handshake message failed" | ||||||
|  | 
 | ||||||
| # Final report | # Final report | ||||||
| 
 | 
 | ||||||
| echo "------------------------------------------------------------------------" | echo "------------------------------------------------------------------------" | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user
	 Manuel Pégourié-Gonnard
						Manuel Pégourié-Gonnard