一、域名更换证书
CER、CRT、PEM 和 PFX 是不同的证书文件格式,它们之间存在一些区别:
CER (DER 编码)
CER 文件是使用 DER 编码的证书文件格式。
CER 文件通常包含单个 X.509 证书。
CER 文件可以包含根证书、中间证书或服务器/客户端证书。
CRT (PEM 编码)
CRT 文件是使用 PEM 编码的证书文件格式。
CRT 文件通常包含单个 X.509 证书,以 "-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----" 标签括起来。
CRT 文件可以包含根证书、中间证书或服务器/客户端证书
PEM (Base64 编码)
PEM 文件是使用 Base64 编码的证书文件格式。
PEM 文件可以包含单个或多个证书、私钥或其他 SSL/TLS 相关信息。
PEM 文件通常以 "-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----" 或 "-----BEGIN PRIVATE KEY-----" 和 "-----END PRIVATE KEY-----" 标签括起来。
PFX (PKCS#12 格式)
PFX 文件是一种二进制格式,用于将私钥和证书打包在一起。
PFX 文件可以包含服务器/客户端证书及其相应的私钥。
PFX 文件通常受密码保护,用于在不同系统或平台之间传输证书和私钥。
总的来说:
-
CER 和 CRT 都是 X.509 证书文件,区别在于编码格式(DER 和 PEM)。
-
PEM 是一种通用的证书/私钥存储格式,可以包含单个或多个证书、私钥等。
-
PFX 是一种打包证书和私钥的二进制格式,通常用于在不同系统之间传输证书。
在配置 SSL/TLS 时,需要根据具体的应用程序要求选择合适的证书文件格式。通常 PEM 格式是最常用的,因为它可以灵活地包含证书链和私钥。
如果需要查看转换后的 CRT 证书内容,可以使用以下命令:
1 | openssl x509 - in output_certificate.crt -text -noout |
这将显示证书的详细信息,包括颁发者、主题、有效期等。
1.1 pfx格式证书转换成key和crt
-
准备阶段
1 2 3 | 1、nginx在编译安装时得安装ssl模块。 2、如果系统没有openssl,则安装opssl。 3、上传ssl证书到服务器 /usr/local/nginx/ssl/xxx .pfx。 |
-
生成证书crt可key
1 2 | openssl pkcs12 - in /usr/local/nginx/ssl/xxx .pfx -clcerts -nokeys -out /usr/local/nginx/ssl/xxx .crt openssl pkcs12 - in /usr/local/nginx/ssl/xxx .pfx -nocerts -nodes -out /usr/local/nginx/ssl/xxx .key |
-
验证证书正确性
1 | openssl s_server -www -accept 443 -cert /usr/local/nginx/ssl/xxx .crt -key /usr/local/nginx/ssl/xxx .key |
-
配置nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | server { listen 443; server_name localhost; ssl on; ssl_certificate /usr/local/nginx/ssl/xxx .crt; ssl_certificate_key /usr/local/nginx/ssl/xxx .rsa; ssl_session_timeout 5m; ssl_protocols SSLv2 SSLv3 TLSv1; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; location ~ /api/ (.*) { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Ssl on; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http: //serverAPI ; } } |
1.2 pfx格式证书通过pem转换成key和crt
-
准备阶段
1 2 3 | 1、nginx在编译安装时得安装ssl模块。 2、如果系统没有openssl,则安装opssl。 3、上传ssl证书到服务器 /usr/local/nginx/ssl/xxx .pfx。 |
-
先将pfx转换成.pem文件
1 2 | # openssl pkcs12 -in 你的文件名.pfx -nodes -out 转换后的文件名.pem openssl pkcs12 - in CertificateAndKey.pfx -nodes -out test .pem |
-
将pem文件导出为key
1 | openssl rsa - in test .pem -out test .key |
-
将pem文件导出为crt
1 | openssl x509 - in test .pem -out test .crt |
-
验证证书正确性
1 | openssl s_server -www -accept 443 -cert /usr/local/nginx/ssl/xxx .crt -key /usr/local/nginx/ssl/xxx .key |
-
配置nginx
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | server { listen 443; server_name localhost; ssl on; ssl_certificate /usr/local/nginx/ssl/xxx .crt; ssl_certificate_key /usr/local/nginx/ssl/xxx .key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP; ssl_prefer_server_ciphers on; location ~ /api/ (.*) { proxy_redirect off; proxy_set_header Host $host; proxy_set_header X-Ssl on; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http: //serverAPI ; } } |
1.3 将cer证书文件转换为crt格式
1.3.1 转换 .cer
文件为 .crt
文件
-
可以使用 OpenSSL 工具将.cer文件转换为.crt文件
-
12345678910
# 如果cer格式是PEM编码的直接使用下面
openssl x509 -
in
input_certificate.cer -out output_certificate.crt -outform PEM
# 如果cer格式是DER编码格式直接使用下面
openssl x509 -
in
input_certificate.cer -out output_certificate.crt -inform DER -outform PEM
其中:
input_certificate.cer 是输入的 CER 格式证书文件。
output_certificate.crt 是输出的 CRT 格式证书文件。
-inform DER 指定输入证书的格式为 DER。
-outform PEM 指定输出证书的格式为 PEM。
1.3.2 更新 Nginx 配置
-
-
在 Nginx 的server块中,更新ssl_certificate和ssl_certificate_key指令:
12ssl_certificate
/path/to/your_certificate
.crt;
ssl_certificate_key
/path/to/your_private_key
.key;
-
如果你使用了.pem格式的私钥文件,则将ssl_certificate_key指令更新为:
1ssl_certificate_key
/path/to/your_private_key
.pem;
-
二、SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
SSL/TLS 密码套件(ssl_ciphers)是指在 SSL/TLS 握手过程中,客户端和服务器协商使用的加密和消息认证的算法集合。
1 2 | # 更新ssl_ciphers配置 ssl_ciphers HIGH:!aNULL:!MD5:!DES:!3DES; |