記事:
ansibleでの管理
記事:
Online Certificate Status Protocol(OCSP)は、X.509公開鍵証明書の失効状態を取得するための通信プロトコルである。RFC 6960 で規定されており、インターネット標準トラック上にある。証明書失効リスト (CRL) の代替として策定されたもので、CRLを公開鍵基盤 (PKI) で使う際の問題に対応している。
certutil -urlcache * delete
ENDPOINT=www.google.com:443 openssl s_client -showcerts -connect $ENDPOINT -servername $ENDPOINT < /dev/null 2>&1 | openssl x509 -noout -text | egrep -i -A 1 -B 1 'OCSP|CRL' Authority Information Access: OCSP - URI:http://ocsp.pki.goog/gts1o1 CA Issuers - URI:http://pki.goog/gsr2/GTS1O1.crt -- X509v3 CRL Distribution Points: Full Name: URI:http://crl.pki.goog/GTS1O1.crl
openssl ciphers -v | awk '{print $1}
curl --version curl 7.29.0 (x86_64-redhat-linux-gnu) libcurl/7.29.0 NSS/3.36 zlib/1.2.7 libidn/1.28 libssh2/1.4.3 curl -tlsv1.0 --ciphers <cipher> https://www.example.com/
ENDPOINT=www.google.co.jp:443 openssl s_client -showcerts -connect $ENDPOINT -servername $ENDPOINT -tls1 < /dev/null 2>&1 | grep -E '^New,|Protocol\s*:' New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-SHA Protocol : TLSv1
ENDPOINT=www.google.co.jp:443 openssl s_client -showcerts -connect $ENDPOINT -servername $ENDPOINT -ssl3 < /dev/null 2>&1 | grep -E '^New,|Protocol\s*:' New, (NONE), Cipher is (NONE) Protocol : SSLv3
openssl x509 -noout -subject -in example.com.crt subject= /C=JP/CN=example.com
subject=C = JP, CN = example.com
subject= /C=JP/CN=example.com
openssl x509 -noout -subject -in example.com.crt -nameopt compat # OpenSSL 1.0.2k-fips 26 Jan 2017 subject= C=JP, CN=example.com # OpenSSL 1.1.0g 2 Nov 2017 subject=C=JP, CN=example.com # LibreSSL 2.2.7 (-nameoptオプション自体が効いてないようだ) subject= /C=JP/CN=example.com
ENDPOINT=www.example.com:443 openssl s_client -showcerts -connect $ENDPOINT -servername $ENDPOINT < /dev/null 2>/dev/null | grep -i -P '^(subject=|issuer=)' subject=/C=US/ST=California/L=Los Angeles/O=Internet Corporation for Assigned Names and Numbers/OU=Technology/CN=www.example.org issuer=/C=US/O=DigiCert Inc/CN=DigiCert SHA2 Secure Server CA
sudo find / -name cacerts /usr/java/jdk1.8.0_66/jre/lib/security/cacerts /etc/pki/java/cacerts /etc/pki/ca-trust/extracted/java/cacerts # JDK keytool -v --list -keystore /usr/java/jdk1.8.0_66/jre/lib/security/cacerts | less Enter keystore password: <ENTER> # その他? less /etc/pki/tls/certs/ca-bundle.crt
nginx: [emerg] SSL_CTX_use_PrivateKey_file("/etc/nginx/ssl/example.com.key") failed (SSL: error:0B080074:x509 certificate routines:X509_check_private_key:key values mismatch)
openssl rsa -in example.com.key -modulus -noout | openssl md5 (stdin)= <md5_1> openssl x509 -in example.com.crt -modulus -noout | openssl md5 (stdin)= <md5_1>
Windows Server IIS等で使われるpfx形式から、linuxでよく使われるkey, crt形式へ変換
# key: 秘密鍵 openssl pkcs12 -in exsample.pfx -nocerts -nodes -out exsample.key # body.crt: 証明書 openssl pkcs12 -in exsample.pfx -clcerts -nokeys -out exsample.body.crt # chain.crt: 中間証明書 openssl pkcs12 -in exsample.pfx -cacerts -nokeys -out exsample.chain.crt
openssl rand -hex 4 7317fa43
openssl rand -base64 4 bKpHSw==
COMMON_NAME=example.com DAYS=3650 # 10 years NEWKEY="rsa:2048" SUBJ="/C=JP/ST=/L=/O=/OU=/CN=$COMMON_NAME" openssl req \ -newkey ${NEWKEY} \ -sha256 \ -keyout ${COMMON_NAME}.key \ -nodes \ -x509 \ -out ${COMMON_NAME}.crt \ -days ${DAYS} \ -subj "${SUBJ}"
PRIVATE_KEY_PASS=$(mkpasswd -l 16 -s 0) ... # -nodes は指定しない # -passout を追加 -passout "pass:$PRIVATE_KEY_PASS" \ # 環境変数で指定したい場合 export PRIVATE_KEY_PASS=<...> -passout "env:PRIVATE_KEY_PASS" \ # ファイルで指定したい場合 echo "pass" > private_key_pass.txt -passout "file:private_key_pass.txt" \
openssl rsa -in example.com.key -aes128 -out example.com.key.pass
ENDPOINTS="www.example.com:443 www.example.net:443" DAYS=30 for endpoint in $ENDPOINTS; do \ echo "# $endpoint"; \ openssl s_client -showcerts -connect $endpoint -servername $(echo $endpoint | cut -d ':' -f 1) < /dev/null 2>&1 | openssl x509 -checkend $(( 86400 * $DAYS )) -enddate; \ done # www.example.com:443 notAfter=Mar 14 23:59:59 2023 GMT Certificate will not expire # www.example.net:443 notAfter=Mar 14 23:59:59 2023 GMT Certificate will not expire
openssl x509 -in example.crt -checkend $(( 86400 * $DAYS )) -enddate
Javaやnode.jsなど、アプリケーション毎にCA証明書を持っている場合があり、マイナーなSSL認証局だと使えない(httpsでの通信で証明書エラー)場合がある。
sudo yum update ca-certificates
bash等で自動化したい時に、タイムアウトを設定したい場合があるが、opensslコマンド自体には設定が無い。
timeout 3 openssl ...
openssl s_client -showcerts -connect www.google.com:443 < /dev/null
認証局は、2016年1月1日までに新しいSHA1 SSLおよびコード署名証明書の発行を停止しなければならない。
Windowsは2017年1月1日でSHA1証明書でのSSL通信を拒否する。
openssl genrsa -aes256 2048 > example.com.key
openssl rsa -in example.com.key -out example.com.nopass.key
openssl rsa -check -noout -in example.com.key # パスフレーズがある場合は聞いてくる Enter pass phrase for example.com.key: RSA key ok
openssl req -new -sha256 -x509 -days 3650 -text -key example.com.nopass.key > example.com.csr Country Name (2 letter code) [XX]:JP State or Province Name (full name) []: Locality Name (eg, city) [Default City]: Organization Name (eg, company) [Default Company Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, your name or your server's hostname) []:example.com Email Address []:
openssl req -verify -noout -in example.com.csr verify OK
openssl req -text -noout -in example.com.csr
openssl x509 -req -in example.com.csr -signkey example.com.key -sha256 -days 3650 -out example.com.crt
openssl x509 -noout -subject -in example.com.crt subject= /OU=Domain Control Validated/CN=*.example.com
-----BEGIN RSA PRIVATE KEY----- 秘密鍵 -----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE----- サーバー証明書 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- 中間証明書 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- クロスルート証明書 -----END CERTIFICATE-----
openssl x509 -noout -text -in example.com.crt #Not Before(証明書の発行日時) #Not After(証明書の有効期限) # 有効期限をGMTからUTCへ変換 openssl x509 -noout -text -enddate -in example.com.crt | perl -ne 'if(/^notAfter=(.+)/){print "$1";}' | xargs -i date -u -d '{}' '+%Y-%m-%d %H:%M:%S %Z' 2016-10-04 03:54:51 UTC
fqdn=www.google.com # SSL証明書に問題が無い場合、終了ステータスは0 curl -s https://$fqdn/ > /dev/null; echo $? 0 # 問題があるSSL証明書や設定されていない場合、0以外 curl -s https://$fqdn/ > /dev/null; echo $? 51
openssl s_client -showcerts -connect $fqdn:443 < /dev/null 2>&1 | openssl x509 -enddate 2>/dev/null | perl -ne 'if(/^notAfter=(.+)/){print "$1";}' | xargs -i date -d '{}' '+%Y-%m-%d %H:%M:%S %Z' 2013-10-01 12:10:13 JST