日期 |
版本 |
作者 |
说明 |
2022-11-15 |
V-1.0 |
孔留锋 |
文档创建。 |
Keystore和P12证书转crt和key
背景
Java前后端分离应用项目部署客户现场,前端采用Nginx做的代理。客户现场提供了东方通内置的ssl文件server.keystore。现需要配置到Nginx里面。
解决
1 2 3 4 5 6
| #1.找一台linux 安装openssl (版本OpenSSL 1.1.1d 以上即可) #上传server.keystore文件到服务器上 #keystore转换为p12文件 keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 -deststoretype PKCS12 openssl pkcs12 -in server.p12 -nokeys -out server.crt openssl pkcs12 -in server.p12 -nocerts -nodes -out server.key
|
Nginx 配置生成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| upstream audit_vue { server 127.0.0.1:8081; keepalive 2000; } server { listen 80; server_name localhost; root /opt/vue/dist; ssl_certificate cert/server.crt; ssl_certificate_key cert/server.key; ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on;
location ~ ^/api/ { poxy_pass http://audit_vue; poxy_set_header Host $host:$server_port; } location / { try_files $uri $uri/ @router; index index.html index.htm; } location @router{ rewrite ^.*$/index.html last; } }
|
Openssl
简介
Openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。
官网地址
https://www.openssl.org/source/
构成部分
- 密码算法库
- 密钥和证书封装管理功能
- SSL通信API接口
用途
- 建立 RSA、DH、DSA key 参数
- 建立 X.509 证书、证书签名请求(CSR)和CRLs(证书回收列表)
- 计算消息摘要
- 使用各种 Cipher加密/解密
- SSL/TLS 客户端以及服务器的测试
- 处理S/MIME 或者加密邮件
证书生成
RSA密钥命令
1 2 3 4 5 6 7 8 9
| #生成RSA私钥(无加密) openssl genrsa -out rsa_private.key 2048 #根据私钥生成RSA公钥 openssl rsa -in rsa_private.key -pubout -out rsa_public.key
#生成RSA私钥(使用aes256加密) openssl genrsa -aes256 -passout pass:111111 -out rsa_aes_private.key 2048 #根据私钥生成RSA公钥 openssl rsa -in rsa_aes_private.key -passin pass:111111 -pubout -out rsa_public.key
|
密钥转换命令
1 2 3 4 5 6 7 8 9 10 11
| #私钥转非加密 openssl rsa -in rsa_aes_private.key -passin pass:111111 -out rsa_private.key #私钥转加密 openssl rsa -in rsa_private.key -aes256 -passout pass:111111 -out rsa_aes_private.key #私钥PEM转DER openssl rsa -in rsa_private.key -outform der-out rsa_aes_private.der
#查看私钥明细 openssl rsa -in rsa_private.key -noout -text #私钥PKCS#1转PKCS#8 openssl pkcs8 -topk8 -in rsa_private.key -passout pass:111111 -out pkcs8_private.key
|
生成自签名证书
1 2 3 4 5 6 7 8 9 10
| #生成 RSA 私钥和自签名证书 openssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt #注:req是证书请求的子命令,-newkey rsa:2048 -keyout private_key.pem 表示生成私钥(PKCS8格式),-nodes 表示私钥不加密,若不带参数将提示输入密码; -x509表示输出证书,-days365 为有效期,此后根据提示输入证书拥有者信息; 若执行自动输入,可使用-subj选项: #penssl req -newkey rsa:2048 -nodes -keyout rsa_private.key -x509 -days 365 -out cert.crt -subj "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=vivo.com/emailAddress=imalt.com"
#使用 已有RSA 私钥生成自签名证书 openssl req -new -x509 -days 365 -key rsa_private.key -out cert.crt #注: -new 指生成证书请求,加上-x509 表示直接输出证书,-key 指定私钥文件,其余选项与上述命令相同
|
生成签名请求及CA 签名
1 2 3 4 5 6 7 8 9 10 11
| #使用 RSA私钥生成 CSR 签名请求 openssl genrsa -aes256 -passout pass:111111 -out server.key 2048 openssl req -new -key server.key -out server.csr #注:此后输入密码、server证书信息完成,也可以命令行指定各类参数 #openssl req -new -key server.key -passin pass:111111 -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=vihoo/OU=dev/CN=vivo.com/emailAddress=imalt.com"
#查看CSR 的细节 cat server.csr
#使用 CA 证书及CA密钥 对请求签发证书进行签发,生成 x509证书 openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -passin pass:111111 -CAcreateserial -out server.crt
|
证书查看及转换
查看证书细节
1
| openssl x509 -in cert.crt -noout -text
|
转换证书编码格式
1
| openssl x509 -in cert.cer -inform DER -outform PEM -out cert.pem
|
*合成 pkcs#12 证书(含私钥)
1 2 3 4 5 6
| # 将 pem 证书和私钥转 pkcs#12 证书 openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 -password pass:111111 -out server.p12 #注意 其中-export指导出pkcs#12 证书,-inkey 指定了私钥文件,-passin 为私钥(文件)密码(nodes为无加密),-password 指定 p12文件的密码(导入导出) # 将 pem 证书和私钥/CA 证书 合成pkcs#12 证书 openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 -chain -CAfile ca.crt -password pass:111111 -out server-all.p12 #注:其中-chain指示同时添加证书链,-CAfile 指定了CA证书,导出的p12文件将包含多个证书。(其他选项:-name可用于指定server证书别名;-caname用于指定ca证书别名)
|
pkcs#12提前
1 2 3 4 5 6 7 8 9 10 11
| #pcks#12 提取PEM文件(含私钥) openssl pkcs12 -in server.p12 -password pass:111111 -passout pass:111111 -out out/server.pem #仅提取私钥 openssl pkcs12 -in server.p12 -password pass:111111 -passout pass:111111 -nocerts -out out/key.pem #仅提取证书(所有证书) openssl pkcs12 -in server.p12 -password pass:111111 -nokeys -out out/key.pem #仅提取ca证书 openssl pkcs12 -in server-all.p12 -password pass:111111 -nokeys -cacerts -out out/cacert.pem #仅提取server证书 openssl pkcs12 -in server-all.p12 -password pass:111111 -nokeys -clcerts -out out/cert.pem
|