OPENSSL NOTLARI =============== Debian Stretch makinede test edildi. # ----------------------------------------------------------------------------- # INSTALL # ----------------------------------------------------------------------------- ### Paketler apt install openssl # ----------------------------------------------------------------------------- # GENERATE CERTIFICATE LIKE A CA (without passphrase) # ----------------------------------------------------------------------------- ### Self-signed sertifika Sertifika otoritesi (CA) için passphrase olmayan private key ve kök sertifika oluşturmakla aynı şekilde yapılıyor. ### Sertifika otoritesi (CA) için passphrase olmayan private key ve kök sertifika openssl req -nodes -new -x509 -days 10950 -keyout myCA.key -out myCA.pem \ -subj \ "/C=TR/ST=-/L=Istanbul/O=myCA/OU=ARGE/CN=myca.net/emailAddress=arge@myca.net" openssl rsa -in myCA.key -noout -text -check openssl x509 -in myCA.pem -noout -text ### Alan için passphrase olmayan private key ve sertifika istek belgesi openssl req -nodes -newkey rsa:2048 -keyout mycompany.com.key \ -out mycompany.com.csr -subj \ "/C=TR/ST=-/L=Istanbul/O=myCompany/OU=ARGE/CN=mycompany.com/emailAddress=arge@mycompany.com" openssl rsa -in mycompany.com.key -noout -text -check openssl req -in mycompany.com.csr -noout -text -verify ### Alan için sertifika openssl x509 -req -CA myCA.pem -CAkey myCA.key -CAcreateserial -days 10950 \ -in mycompany.com.csr -out mycompany.com.pem openssl x509 -in mycompany.com.pem -noout -text openssl verify -CAfile myCA.pem mycompany.com.pem cat myCA.srl ### Chain sertifika root sertifikaya erişene kadar bütün sertifikalar sırası ile aynı dosyaya eklenir. root sertifika eklenmeyecek. cat mycompany.com.pem myca.pem > mycompany.com.fullchain.pem # ----------------------------------------------------------------------------- # GENERATE CERTIFICATE LIKE A CA (with passphrase) # ----------------------------------------------------------------------------- ### Sertifika otoritesi (CA) için private key openssl genrsa -des3 -out myCA.key -passout pass:mypass1 2048 openssl rsa -in myCA.key -noout -text -check -passin pass:mypass1 ### Sertifika otoritesi (CA) için kök sertifika openssl req -new -x509 -nodes -days 10950 -key myCA.key -out myCA.pem \ -passin pass:mypass1 -subj \ "/C=TR/ST=-/L=Istanbul/O=myCA/OU=ARGE/CN=myca.net/emailAddress=arge@myca.net" openssl x509 -in myCA.pem -noout -text ### Alan için private key openssl genrsa -out mycompany.com.key -passout pass:mypass2 2048 openssl rsa -in mycompany.com.key -noout -text -check -passin pass:mypass2 ### Alan için sertifika istek belgesi openssl req -new -key mycompany.com.key -out mycompany.com.csr -subj \ "/C=TR/ST=-/L=Istanbul/O=myCompany/OU=ARGE/CN=mycompany.com/emailAddress=arge@mycompany.com" openssl req -in mycompany.com.csr -noout -text -verify ### Extension dosyası Birden fazla alan adi ve IP aynı sertifika içinde yer alacaksa extension dosyası gerekir. Extension dosyası varken CN dikkate alınmıyor. Bu nedenle default alan adının da dosya içinde yer alması gerekiyor. mycompany.ext authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names [alt_names] DNS.1 = mycompany.com DNS.2 = mycompany.net DNS.3 = mycompany.org DNS.4 = *.mycompany.com DNS.5 = *.mycompany.net DNS.6 = *.mycompany.org ### Alan için sertifika openssl x509 -req -CA myCA.pem -CAkey myCA.key -passin pass:mypass1 \ -CAcreateserial -in mycompany.com.csr -out mycompany.com.pem \ -extfile mycompany.ext -days 10950 openssl x509 -in mycompany.com.pem -noout -text openssl verify -CAfile myCA.pem mycompany.com.pem # ----------------------------------------------------------------------------- # CLIENT SIDE # ----------------------------------------------------------------------------- ### update ca-certificates database CA sertifikası, ca-certificates veritabanına eklenirse curl, wget vb uygulamalar için parametre ile CA sertifikasını belirtmeye gerek kalmıyor. Browser gibi uygulamalar, bu veritabanını kullanmıyor, kendi veritabanlarını kullanıyorlar. apt install ca-certificates cp myCA.pem /usr/local/share/ca-certificates/myCA.crt update-ca-certificates ### curl with custom CA certificate curl --cacert myCA.pem https://... ### wget with custom CA certificate wget --ca-certificate=myCA.pem https://... # ----------------------------------------------------------------------------- # CA CERTIFICATE FOR FIREFOX & CHROMIUM # ----------------------------------------------------------------------------- ### Packages apt install libnss3-tools ### find DBs find ~ -name cert9.db ### Delete certificate if already exists certutil -n "myCA" -D -d sql:/home/myuser/.pki/nssdb/ certutil -n "myCA" -D -d sql:/home/myuser/.mozilla/firefox/XXXXXX.default/ ### Add certificate certutil -A -n "myCA" -t "TCu,Cu,Tu" -i myCA.pem \ -d sql:/home/myuser/.pki/nssdb/ certutil -A -n "myCA" -t "TCu,Cu,Tu" -i myCA.pem \ -d sql:/home/myuser/.mozilla/firefox/XXXXXX.default/ ### List certificates certutil -L -d sql:/home/myuser/.pki/nssdb/ certutil -L -d sql:/home/myuser/.mozilla/firefox/XXXXXX.default/ # ----------------------------------------------------------------------------- # Kaynaklar # ----------------------------------------------------------------------------- https://deliciousbrains.com/ssl-certificate-authority-for-local-https-development/ https://gist.github.com/Soarez/9688998 https://www.sslshopper.com/article-most-common-openssl-commands.html https://www.shellhacks.com/create-csr-openssl-without-prompt-non-interactive/