You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					119 lines
				
				3.0 KiB
			
		
		
			
		
	
	
					119 lines
				
				3.0 KiB
			| 
											3 years ago
										 | # Certificates generation
 | ||
|  | 
 | ||
|  | ## RSA Signatures - Certificates (without passphrase)
 | ||
|  | 
 | ||
|  | Certificates `private.key` and `public.key` are generated with http://travistidwell.com/jsencrypt/demo/ or with the following command | ||
|  | 
 | ||
|  | ```sh | ||
|  | openssl genrsa -out private.key 2048 | ||
|  | openssl rsa -in private.key -out public.key -outform PEM -pubout | ||
|  | ``` | ||
|  | 
 | ||
|  | Code example | ||
|  | 
 | ||
|  | ```js | ||
|  | const { readFileSync } = require('fs') | ||
|  | const fastify = require('fastify')() | ||
|  | const jwt = require('@fastify/jwt') | ||
|  | 
 | ||
|  | fastify.register(jwt, { | ||
|  |   secret: { | ||
|  |     private: readFileSync('path/to/private.key', 'utf8'), | ||
|  |     public: readFileSync('path/to/public.key', 'utf8') | ||
|  |   }, | ||
|  |   sign: { algorithm: 'RS256' } | ||
|  | }) | ||
|  | ``` | ||
|  | 
 | ||
|  | ## RSA Signatures - Certificates (with passphrase)
 | ||
|  | 
 | ||
|  | Certificates `private.pem` and `public.pem` are generated with the following command lines | ||
|  | 
 | ||
|  | ```sh | ||
|  | # generate a 2048-bit RSA key pair, and encrypts them with a passphrase
 | ||
|  | # the passphrase I choose for the demo files is: super secret passphrase
 | ||
|  | openssl genrsa -des3 -out private.pem 2048 | ||
|  | 
 | ||
|  | # export the RSA public key to a file
 | ||
|  | openssl rsa -in private.pem -outform PEM -pubout -out public.pem | ||
|  | ``` | ||
|  | 
 | ||
|  | Code example | ||
|  | 
 | ||
|  | ```js | ||
|  | const { readFileSync } = require('fs') | ||
|  | const fastify = require('fastify')() | ||
|  | const jwt = require('@fastify/jwt') | ||
|  | 
 | ||
|  | fastify.register(jwt, { | ||
|  |   secret: { | ||
|  |     private: { | ||
|  |       key: readFileSync('path/to/private.pem', 'utf8'), | ||
|  |       passphrase: 'super secret passphrase' | ||
|  |     }, | ||
|  |     public: readFileSync('path/to/public.pem', 'utf8') | ||
|  |   }, | ||
|  |   sign: { algorithm: 'RS256' } | ||
|  | }) | ||
|  | ``` | ||
|  | 
 | ||
|  | ## ECDSA Signatures - Certificates (without passphrase)
 | ||
|  | 
 | ||
|  | Certificates `privateECDSA.key` and `publicECDSA.key` are generated with the following command lines | ||
|  | 
 | ||
|  | ```sh | ||
|  | # generate a P-256 curve ECDSA key pair
 | ||
|  | openssl ecparam -genkey -name prime256v1 -out privateECDSA.key | ||
|  | 
 | ||
|  | # export the ECDSA public key to a file
 | ||
|  | openssl ec -in privateECDSA.key -pubout -out publicECDSA.key | ||
|  | ``` | ||
|  | 
 | ||
|  | Code example | ||
|  | 
 | ||
|  | ```js | ||
|  | const { readFileSync } = require('fs') | ||
|  | const fastify = require('fastify')() | ||
|  | const jwt = require('@fastify/jwt') | ||
|  | 
 | ||
|  | fastify.register(jwt, { | ||
|  |   secret: { | ||
|  |     private: readFileSync('path/to/privateECDSA.key', 'utf8'), | ||
|  |     public: readFileSync('path/to/publicECDSA.key', 'utf8') | ||
|  |   }, | ||
|  |   sign: { algorithm: 'ES256' } | ||
|  | }) | ||
|  | ``` | ||
|  | 
 | ||
|  | ## ECDSA Signatures - Certificates (with passphrase)
 | ||
|  | 
 | ||
|  | Certificates `privateECDSA.pem` and `publicECDSA.pem` are generated with the following command lines | ||
|  | 
 | ||
|  | ```sh | ||
|  | # generate a P-256 curve ECDSA key pair, and encrypts them with a passphrase
 | ||
|  | # the passphrase I choose for the demo files is: super secret passphrase
 | ||
|  | openssl ecparam -genkey -name prime256v1 | openssl ec -aes256 -out privateECDSA.pem | ||
|  | 
 | ||
|  | # export the ECDSA public key to a file
 | ||
|  | openssl ec -in privateECDSA.pem -pubout -out publicECDSA.pem | ||
|  | ``` | ||
|  | 
 | ||
|  | Code example | ||
|  | 
 | ||
|  | ```js | ||
|  | const { readFileSync } = require('fs') | ||
|  | const fastify = require('fastify')() | ||
|  | const jwt = require('@fastify/jwt') | ||
|  | 
 | ||
|  | fastify.register(jwt, { | ||
|  |   secret: { | ||
|  |     private: { | ||
|  |       key: readFileSync('path/to/publicECDSA.pem', 'utf8'), | ||
|  |       passphrase: 'super secret passphrase' | ||
|  |     }, | ||
|  |     public: readFileSync('path/to/publicECDSA.pem', 'utf8') | ||
|  |   }, | ||
|  |   sign: { algorithm: 'ES256' } | ||
|  | }) | ||
|  | ``` |