RSA

RSA X.509

mkdir -p cert/rsa

CA KEY

openssl genrsa -out cert/rsa/caroot.key 2048 openssl req -new -x509 -days 3650 -config cert/rsa/synrc.cnf \ -key cert/rsa/caroot.key \ -out cert/rsa/caroot.pem \ -subj "/C=UA/ST=Kyiv/O=SYNRC/CN=CA"

CA CRL

openssl ca -config cert/rsa/synrc.cnf \ -gencrl -out cert/rsa/rsaroot.crl

SERVER KEY

openssl genrsa -out cert/rsa/server.key 2048 openssl req -new -days 365 \ -key cert/rsa/server.key \ -out cert/rsa/server.csr \ -subj "/C=UA/ST=Kyiv/O=SYNRC/CN=SERVER"

SERVER CERT

openssl ca -config cert/rsa/synrc.cnf \ -extensions server_cert \ -days 730 \ -in cert/rsa/server.csr \ -out cert/rsa/server.pem \ -cert cert/rsa/caroot.pem \ -keyfile cert/rsa/caroot.key

CLIENT KEY

openssl genrsa -out cert/rsa/client.key 2048 openssl req -new -days 365 \ -key cert/rsa/client.key \ -out cert/rsa/client.csr \ -subj "/C=UA/ST=Kyiv/O=SYNRC/CN=Maxim"

CLIENT CERT

openssl ca -config cert/rsa/synrc.cnf \ -extensions usr_cert \ -days 365 \ -in cert/rsa/client.csr \ -out cert/rsa/client.pem \ -cert cert/rsa/caroot.pem \ -keyfile cert/rsa/caroot.key

CLIENT PFX

openssl pkcs12 -export \ -inkey cert/rsa/client.key \ -in cert/rsa/client.pem \ -out cert/rsa/client.p12

RSA CNF

[ ca ] default_ca = CA_default [ CA_default ] dir = /home/ubuntu/depot/synrc certs = $dir/cert/rsa crl_dir = $dir/cert/rsa new_certs_dir = $dir/cert/rsa database = $dir/cert/rsa/index.txt serial = $dir/cert/rsa/serial RANDFILE = $dir/cert/rsa/.rand private_key = $dir/cert/rsa/caroot.key certificate = $dir/cert/rsa/caroot.pem crlnumber = $dir/cert/rsa/crlnumber crl = $dir/cert/rsa/rsaroot.crl crl_extensions = crl_ext default_crl_days = 3650 default_md = sha384 name_opt = ca_default cert_opt = ca_default default_days = 3650 preserve = no policy = policy_strict [ policy_strict ] countryName = match stateOrProvinceName = match organizationName = match organizationalUnitName = optional commonName = supplied [ req ] default_bits = 2048 distinguished_name = req_distinguished_name string_mask = utf8only default_md = sha384 x509_extensions = v3_ca [ req_distinguished_name ] countryName = Country Name (2 letter code) stateOrProvinceName = State or Province Name localityName = Locality Name 0.organizationName = Organization Name organizationalUnitName = Organizational Unit Name commonName = Common Name commonName_default = CA countryName_default = UA stateOrProvinceName_default = Kyiv localityName_default = Kyiv 0.organizationName_default = SYNRC organizationalUnitName_default = HQ [ v3_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true keyUsage = critical, digitalSignature, cRLSign, keyCertSign [ v3_intermediate_ca ] subjectKeyIdentifier = hash authorityKeyIdentifier = keyid:always,issuer basicConstraints = critical, CA:true, pathlen:0 keyUsage = critical, digitalSignature, cRLSign, keyCertSign crlDistributionPoints = @crl_info authorityInfoAccess = @ocsp_info [ usr_cert ] basicConstraints = CA:FALSE nsCertType = client, email nsComment = "Synrc Client Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = clientAuth, emailProtection subjectAltName = @alt_names [ server_cert ] basicConstraints = CA:FALSE nsCertType = server nsComment = "Synrc Server Certificate" subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer:always keyUsage = critical, digitalSignature, keyEncipherment extendedKeyUsage = serverAuth crlDistributionPoints = @crl_info authorityInfoAccess = @ocsp_info subjectAltName = @alt_names [alt_names] DNS.0 = localhost [ crl_ext ] authorityKeyIdentifier=keyid:always [ ocsp ] basicConstraints = CA:FALSE subjectKeyIdentifier = hash authorityKeyIdentifier = keyid,issuer keyUsage = critical, digitalSignature extendedKeyUsage = critical, OCSPSigning [crl_info] URI.0 = http://crl.n2o.dev:8081/rsaroot.crl [ocsp_info] caIssuers;URI.0 = http://crl.n2o.dev:8081/rsaroot.crt OCSP;URI.0 = http://ocsp.n2o.dev:8081/

LibreSSL

openssl s_server -accept 8771 \ -key cert/rsa/server.key \ -cert cert/rsa/server.pem \ -CAfile cert/rsa/caroot.pem -Verify 1 openssl s_client -connect localhost:8771 \ -key cert/rsa/client.key \ -cert cert/rsa/client.pem \ -CAfile cert/rsa/caroot.pem -showcerts