| 
									
										
										
										
											2018-11-23 14:44:57 -07:00
										 |  |  | #!/bin/bash
 | 
					
						
							| 
									
										
										
										
											2018-11-23 22:22:34 -07:00
										 |  |  | set -e | 
					
						
							| 
									
										
										
										
											2018-11-23 14:44:57 -07:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 22:22:34 -07:00
										 |  |  | gencsr2() { | 
					
						
							| 
									
										
										
										
											2018-11-23 14:44:57 -07:00
										 |  |  |   keyfile=$1 | 
					
						
							|  |  |  |   domain=$2 | 
					
						
							|  |  |  |   csrfile=$3 | 
					
						
							|  |  |  |   openssl req -key $keyfile -new -nodes \
 | 
					
						
							|  |  |  |     -config <(printf "[req]
 | 
					
						
							|  |  |  | prompt = no | 
					
						
							|  |  |  | req_extensions = req_ext | 
					
						
							|  |  |  | distinguished_name = dn | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ dn ] | 
					
						
							|  |  |  | CN = $domain | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ req_ext ] | 
					
						
							|  |  |  | subjectAltName = @alt_names | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ alt_names ] | 
					
						
							|  |  |  | DNS.1 = $domain | 
					
						
							|  |  |  | DNS.2 = www.$domain") \
 | 
					
						
							|  |  |  |     -out $csrfile | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-11-23 22:22:34 -07:00
										 |  |  | gencsr3() { | 
					
						
							|  |  |  |   keyfile=$1 | 
					
						
							|  |  |  |   domain=$2 | 
					
						
							|  |  |  |   csrfile=$3 | 
					
						
							|  |  |  |   openssl req -key $keyfile -new -nodes \
 | 
					
						
							|  |  |  |     -config <(printf "[req]
 | 
					
						
							|  |  |  | prompt = no | 
					
						
							|  |  |  | req_extensions = req_ext | 
					
						
							|  |  |  | distinguished_name = dn | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ dn ] | 
					
						
							|  |  |  | CN = $domain | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ req_ext ] | 
					
						
							|  |  |  | subjectAltName = @alt_names | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | [ alt_names ] | 
					
						
							|  |  |  | DNS.1 = $domain | 
					
						
							|  |  |  | DNS.2 = www.$domain | 
					
						
							|  |  |  | DNS.3 = api.$domain") \
 | 
					
						
							|  |  |  |     -out $csrfile | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rndcsr() { | 
					
						
							|  |  |  |   keysize=$1 | 
					
						
							|  |  |  | 	openssl genrsa -out fixtures/valid.pkcs1.1.pem $keysize | 
					
						
							|  |  |  |   rasha fixtures/valid.pkcs1.1.pem > fixtures/test.jwk.1.json | 
					
						
							|  |  |  |   gencsr3 fixtures/valid.pkcs1.1.pem whatever.net fixtures/valid.csr.1.pem | 
					
						
							|  |  |  |   node bin/rsa-csr.js fixtures/test.jwk.1.json whatever.net,www.whatever.net,api.whatever.net \
 | 
					
						
							|  |  |  |     > fixtures/test.csr.1.pem | 
					
						
							|  |  |  |   diff fixtures/valid.csr.1.pem fixtures/test.csr.1.pem | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "" | 
					
						
							|  |  |  | echo "Generating CSR for example.com,www.example.com" | 
					
						
							|  |  |  | gencsr2 fixtures/privkey-rsa-2048.pkcs1.pem example.com fixtures/example.com-www.csr.pem | 
					
						
							|  |  |  | node bin/rsa-csr.js fixtures/privkey-rsa-2048.jwk.json example.com,www.example.com \
 | 
					
						
							|  |  |  |   > fixtures/example.com-www.csr.1.pem | 
					
						
							|  |  |  | diff fixtures/example.com-www.csr.pem fixtures/example.com-www.csr.1.pem | 
					
						
							|  |  |  | echo "Pass" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "" | 
					
						
							|  |  |  | echo "Generating CSR for whatever.net,www.whatever.net,api.whatever.net" | 
					
						
							|  |  |  | gencsr3 fixtures/privkey-rsa-2048.pkcs1.pem whatever.net fixtures/whatever.net-www-api.csr.pem | 
					
						
							|  |  |  | node bin/rsa-csr.js fixtures/privkey-rsa-2048.jwk.json whatever.net,www.whatever.net,api.whatever.net \
 | 
					
						
							|  |  |  |   > fixtures/whatever.net-www-api.csr.1.pem | 
					
						
							|  |  |  | diff fixtures/whatever.net-www-api.csr.pem fixtures/whatever.net-www-api.csr.1.pem | 
					
						
							|  |  |  | echo "Pass" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "" | 
					
						
							|  |  |  | echo "Generating random keys of various lengths and re-running tests for each" | 
					
						
							|  |  |  | rndcsr 3072 | 
					
						
							|  |  |  | rndcsr 1024 | 
					
						
							|  |  |  | rndcsr 512 # minimum size that can reasonably work | 
					
						
							|  |  |  | echo "Pass" | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | rm fixtures/*.1.* | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | echo "" | 
					
						
							|  |  |  | echo "All tests passed!" | 
					
						
							|  |  |  | echo "  • Fixture CSRs built and do not differ from OpenSSL-generated CSRs" | 
					
						
							|  |  |  | echo "  • Random keys and CSRs are also correct" |