免费的https证书
WoSign——因操作不规范已经被要求整改, 火狐等浏览器也将 移除 其相关证书。- Let's Encrypt 就是时间短了点,需要3个月renew一下.
- startssl.com 问: 各大https证书厂商推的 普通, DV, OV, EV 证书差别在何处?
http2
to pem
openssl rsa -in ~/.ssh/id_rsa -outform pem > ~/.ssh/id_rsa.pem
KeyTool 和 OpenSSL 相互转换
参考:
- OpenSSL
- x509v3_config
- RabbitMQ SSL
- Win32 OpenSSL
- 《How to create a self-signed SSL Certificate》
- OpenSSL to Keytool Conversion tips
- http://en.wikipedia.org/wiki/X.509#Certificate_filename_extensions
- RDN, Relative Distinguished Names
name | desc | memo |
---|---|---|
CN | CommonName | |
OU | OrganizationalUnit | |
O | Organization | |
L | Locality | |
S | StateOrProvinceName | |
C | CountryName |
OpenSSL -> KeyTools
- 创建所需的配置文件 openssl.cnf
```
[ req ]
distinguished_name = root_ca_distinguished_name
[ root_ca_distinguished_name ]
commonName = hostname
[ root_ca_extensions ]
basicConstraints = CA:true
keyUsage = keyCertSign, cRLSign
[ client_ca_extensions ]
basicConstraints = CA:false
keyUsage = digitalSignature
extendedKeyUsage = 1.3.6.1.5.5.7.3.2
[ server_ca_extensions ]
basicConstraints = CA:false
keyUsage = keyEncipherment
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
```
一个命令就生成自签名的 CA 证书
# 该命令仅供参考,后续命令会将该命令分解演示 openssl req \ -x509 \ -newkey rsa:2048 \ -days 3650 \ -sha256 \ -config openssl.cnf \ -extensions root_ca_extensions \ -subj "/CN=whhit.me/OU=WeRun Club/O=whhit/L=Weihai/C=CN" \ -outform PEM \ -out whhit.pem.cer \ -keyout whhit.pem.key \ -nodes #-passout pass:123456
生成一个新的私钥
openssl genrsa \ -out server.pem.key \ 2048 #-passout pass:123456 \
使用指定的私钥生成一个CSR (Certificate Signing Request)
openssl req \ -new \ -key server.pem.key \ -out server.pem.csr \ -subj "/CN=btpka3.me/OU=WeRun Club/O=whhit/L=Weihai/C=CN" # -passin pass:123456 \ # 可以使用 "-nodes" 选项使得在创建私钥时加密
使用指定的私钥签名生成证书
openssl x509 \ -req \ -days 3650 \ -in server.pem.csr \ -CA whhit.pem.cer \ -CAkey whhit.pem.key \ -CAcreateserial \ -extfile openssl.cnf \ -extensions server_ca_extensions \ -out server.pem.cer # 或者 openssl x509 \ -req \ -days 3650 \ -in server.pem.csr \ -signkey whhit.pem.key \ -extfile openssl.cnf \ -extensions server_ca_extensions \ -out server.pem.cer # -passin pass:123456 \ # 上述命令也可以使用 ca 子命令替换
将私钥和证书转化为 PKCS#12 格式的单个文件
openssl pkcs12 \ -export \ -in server.pem.cer \ -inkey server.pem.key \ -out server.p12 \ -passout pass:123456 \ -name server #-passin pass:123456 \
使用 KeyTools 将 PKSC#12 文件导入为 JKS 的 KeyStore
keytool -importkeystore \ -srcstoretype PKCS12 \ -srckeystore whhit.p12 \ -srcstorepass 123456 \ -srcalias tomcat \ -srckeypass 123456 \ -deststoretype JKS \ -destkeystore whhit.jks \ -deststorepass 123456 \ -destalias tomcat \ -destkeypass 123456
其他命令
# 将加密的私钥导出为明文的私钥 openssl rsa \ -in whhit.pem.key \ -passin pass:123456 \ -out whhit.pem.clear.key # PEM -> DER openssl x509 \ -in whhit.pem.cer \ -out whhit.der.cer \ -outform DER # 显示证书信息 openssl x509 \ -in whhit.pem.cer \ -text # 检验证书 openssl verify \ -verbose \ -CAfile whhit.pem.cer \ zll.pem.cer # 检查使用特定版本的 SSL/TLS 协议进行链接 # 如果链接成功,通常可以输入 "GET /" 进行检测。 openssl s_client \ -ssl3 \ -connect 127.0.0.1:5671
KeyTools -> OpenSSL
生成一个含自签名 CA 证书的 JKS 类型的 KeyStore
keytool -genkeypair \ -alias tomcat \ -keyalg RSA \ -keysize 1024 \ -sigalg SHA1withRSA \ -dname "CN=test.me, OU=R & D department, O=\"BJ SOS Software Tech Co., Ltd\", L=Beijing, S=Beijing, C=CN" \ -validity 3650 \ -keypass 456789 \ -keystore sos.jks \ -storepass 123456 keytool -list -keystore sos.jks
从 KeyStore 中导出证书
keytool -exportcert \ -rfc \ -file sos.pem.cer \ -alias tomcat \ -keystore sos.jks \ -storepass 123456
将 KeyStore 变更为 PKCS#12 格式
keytool -importkeystore \ -srcstoretype JKS \ -srckeystore sos.jks \ -srcstorepass 123456 \ -srcalias tomcat \ -srckeypass 456789 \ -deststoretype PKCS12 \ -destkeystore sos.p12 \ -deststorepass 123456 \ -destalias tomcat \ -destkeypass 123456 \ -noprompt # 导出证书 openssl pkcs12 \ -in sos.p12 \ -passin pass:123456 \ -nokeys \ -out sos.pem.cer openssl pkcs12 \ -in sos.p12 \ -passin pass:123456 \ -nodes \ -nocerts \ -out sos.pem.key
使用 OpenSSL 解析 PKCS#12 格式的 KeyStore,并转化为 PEM 格式(包含证书和私钥)
openssl pkcs12 \ -in sos.p12 \ -out sos.pem.p12 \ -passin pass:123456 \ -nodes
单独输出私钥和公钥 (注意:不是证书)
```bash
私钥
openssl rsa \
-in sos.pem.p12 \ -passin pass:123456 \ -out sos.pem.key \ -passout pass:123456
明文私钥
openssl rsa \
-in sos.pem.key \ -passin pass:123456 \ -out sos.pem.clear.key
# 公钥
openssl rsa \
-in sos.pem.p12 \
-passin pass:123456 \
-out sos.pem.pub \
-pubout
```
单独输出证书
openssl x509 -in sos.pem.p12 -out sos.pem.cer
Apahce 配置 HTTPS
- 修改apache的配置文件 conf/httpd.conf,启用以下两句
LoadModule ssl_module modules/mod_ssl.so Include conf/extra/httpd-ssl.conf
- 修改apache的配置文件 conf/extra/httpd-ssl.conf, 修改一下两个指令所指向的路径
- SSLCertificateFile :应当指向上述使用openssl生成自签名证书时生成的 *.pem.cer
- SSLCertificateKeyFile :应当指向上述使用openssl生成自签名证书时生成的 *.pem.clear.key
- 重启Apache,并将证书安装到IE“受信任的根证书”区域即可。
对子域名使用wildcard证书示例
示例环境:Windows + JDK 1.6 + Tomcat 6
修改 C:\Windows\System32\drivers\etc\hosts,追加以下设置:
127.0.0.1 cas.localhost.me 127.0.0.1 app.localhost.me 127.0.0.1 stateless.localhost.me
注意:经测试发现WildCard证书无法对
*.localhost
起作用。而*.localhost.me
也无法对a.b.localhost.me
起作用,参见这里。生成自签名的数字证书
针对子域名
keytool -genkeypair -alias mykey2 -keyalg RSA \ -keysize 1024 \ -sigalg SHA1withRSA \ -dname "CN=*.localhost.me, OU=R & D department, O=\\"ABC Tech Co., Ltd\\", L=Weihai, S=Shandong, C=CN" \ -validity 365 \ -keypass 123456 \ -keystore tomcat.keystore -storepass 123456
注意:其中CN是域名。-keypass 和 -storepass tomcat貌似是要求一致的。
针对IP地址
keytool -genkeypair -alias mykey2 -keyalg RSA -keysize 1024 -sigalg SHA1withRSA ^ -dname "CN=10.1.18.123, OU=R & D department, O=\\"ABC Tech Co., Ltd\\", L=Weihai, S=Shandong, C=CN" ^ -ext SAN=IP:10.1.18.123 ^ -validity 365 -keypass 123456 -keystore tomcat.keystore -storepass 123456
注意:
-ext
选项是 JDK 7 中新增选项 其中CN也应该为IP地址。
导出证书
keytool -exportcert -rfc -file localhost.me.cer -alias mykey2 -keystore tomcat.keystore -storepass 123456
将导出的证书安装到:受信任的根证书颁发机构
- 配置Tomcat启用HTTPS。${CATALINA_HOME}/conf/server.xml:
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:/tomcat.keystore" keystorePass="123456"/>
- 为tomcat指定JVM启动参数
- 如果在 Eclipse中启动Tomcat,则需要追加JVM参数:
-Djavax.net.ssl.trustStore="D:\tomcat.keystore" -Djavax.net.ssl.trustStorePassword="123456"
- 如果需要单独启动tomcat,则在 %CATALINA_HOME%/bin/catalina.bat 开头追加:
JAVA_OPTS = -Djavax.net.ssl.trustStore="D:\tomcat.keystore" -Djavax.net.ssl.trustStorePassword="123456"
- 如果在 Eclipse中启动Tomcat,则需要追加JVM参数:
- 启动Tomcat后通过IE、Chrome访问以下网址均不会报证书错误:(Firefox有独立的证书设定)
https://cas.localhost.me:8443/ https://app.localhost.me:8443/ https://stateless.localhost.me:8443/
keytool 合并两个keystore
keytool -importkeystore \
-srckeystore src.keystore \
-srcstorepass 123456 \
-destkeystore dest.keystore \
-deststorepass 123456
使用PUTTYgen 生成SSH密钥
参考这里,使用以下步骤:
- Open PuttyGen
- Click Load
- Load your private key
- Go to Conversions->Export OpenSSH and export your private key
- Copy your private key to ~/.ssh/id_dsa (or id_rsa).
- Create the RFC 4716 version of the public key using ssh-keygen
ssh-keygen -i -f ~/.ssh/id_dsa_com.pub > ~/.ssh/id_dsa.pub
生成SSH key
ssh-keygen -t rsa -C "[email protected]" -N 'xxxPass' -f ~/.ssh/id_rsa
确认openssl是否已经修正了 Heartbleed
yum update
rpm -q --changelog openssl-1.0.1e | grep -B 1 CVE-2014-0160
rpm -q --changelog openssl-devel | grep -B 1 CVE-2014-0160
jarsigner
签名
keytool -genkeypair \
-alias btpka3 \
-keyalg RSA \
-keysize 1024 \
-sigalg SHA1withRSA \
-dname "CN=btpka3.github.io, OU=R&D, O=\"WeRun Club\", L=WeiHai, S=ShanDong, C=CN" \
-validity 3650 \
-keypass 123456 \
-keystore sos.jks \
-storepass 123456
jarsigner -keystore sos.jks \
-storepass 123456 \
-storetype jks \
-keypass 123456 \
-digestalg SHA1 \
-sigalg SHA1withRSA \
-tsa http://timestamp.digicert.com \
-signedjar platforms/android/build/outputs/apk/android-release-signed.apk \
platforms/android/build/outputs/apk/android-release-unsigned.apk \
btpka3
验证
jarsigner -verify \
-keystore sos.jks \
-storetype jks \
-tsa http://timestamp.digicert.com \
-digestalg SHA1 \
-sigalg SHA1withRSA \
platforms/android/build/outputs/apk/android-release-signed.apk
说明: 微信开发者中心登记的app的签名其实是证书的 md5值 (小写,无冒号间隔) :
# 方法1: 通过keytool 查看 Certificate fingerprints: 提示中的 MD5 值:
keytool -list -v -keystore sos.jks
# 方法2: 通过keytool 查看 APK 压缩包中 META-INF目录下 RSA 文件
keytool -printcert -file path/to/xxx.apk/META-INF/PLATFORM.RSA
版本
# 检查版本
openssl version
yum info openssl
# 可以到 https://www.openssl.org/ 下载并编译安装