使用openssl自签ssl证书
注:自签的证书只是在测试环境中使用 (此节看看就好),实际线上环境的证书请参考下节 <自检ssl证书被浏览器提示非安全证书>
- 首先,进入你想创建证书和私钥的目录,例如:
cd /alidata/server/nginx-1.4.4/csr3
- 创建服务器私钥,生成RSA密钥,命令会让你输入一个口令:
openssl genrsa -des3 -out server.key 1024
将会看到此目录多了个 server.key
- (使用者)创建签名请求证书CSR
可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构
(注:CommonNam请填写域名,否则会引起浏览器警报)
openssl req -new -key server.key -out server.csr
将会看到此目录多了个 server.csr
- (颁发者)创建一个自己签署的CA证书: (注:Common Name 请填写域名,否则会引起浏览器警报)
openssl req -new -x509 -days 3650 -key server.key -out server.crt
将会看到此目录多了个 server.crt
- 最后标记证书使用上述私钥和CSR:
- 以下命令生成v1版证书,我们以这个为例
openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out server.crt
- 以下命令生成v3版证书,另外需要配置openssl.cnf
见: http://cangzihu.blog.51cto.com/6671848/1879644
openssl x509 -req -days 365 -sha256 -extfile openssl.cnf -extensions v3_req -in server.csr -signkey server.key -out server.crt
例: openssl x509 -req -days 365 -sha256 -in server.csr -signkey server.key -out server.crt
修改Nginx配置文件,让其包含新标记的证书和私钥:
server {
server_name localhost;
root /alidata/www/phpwind/ceshi;
listen 443;
ssl on;
# 符合PFS规范的加密套餐
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
# 需要在服务端TLS协议中启用TLS1.2
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_certificate /alidata/server/nginx-1.4.4/csr3/server.crt;
ssl_certificate_key /alidata/server/nginx-1.4.4/csr3/server.key;
}
重启nginx。这样就可以访问了。
另外还可以加入如下代码实现80端口重定向到443:
server {
listen 80;
server_name localhost;
rewrite ^(.*) https://$server_name$1 permanent;
}
查看key、csr及证书信息
openssl rsa -noout -text -in server.key
openssl req -noout -text -in server.csr
openssl x509 -noout -text -in server.crt
不同格式证书的转换
PKCS转换为PEM
openssl pkcs12 -in myserver.pfx -out myserver.pem -nodes
PEM转换为DER
openssl x509 -outform der -in myserver.pem -out myserver.[der|crt]
PEM提取KEY
openssl RSA -in myserver.pem -out myserver.key
DER转换为PEM
openssl x509 -inform der -in myserver.[cer|crt] -out myserver.pem
PEM转换为PKCS
openssl pkcs12 -export -out myserver.pfx -inkey myserver.key -in myserver.pem -certfile ca.crt
自检ssl证书被浏览器提示非安全证书
因自己生成的证书在浏览器会提示非安全证书[因为没被证书授权机构认证过,且AC证书的颁布者是自己又不是认证机构],虽然可以添加例外,但总不能让每一个用户都这么做,所以建议不使用自己生成的证书。那么我们使用第三方中介[数字证书授权机构(CA,Certificate Authority)是管理和签发安全凭证和加密信息安全密钥的网络机构]机构为我们生成的证书。我们只需要提交server.key、server.csr,认证机构将会给我们 server.crt,然后我们再配置到nginx中
解决方法:
可以去阿里云或腾讯云生成免费证书(1 年,到期再提交) 审核通过后 (很好通过不需要资料),将证书下载,然后修改nginx配置文件的sslcertificate 和 ssl_certificate_key ,然后重启nginx就可以了。并且我们也不需要提交.key与_.csr
阿里云:https://www.aliyun.com/product/cas?spm=5176.8142029.388261.123.Sb9Jvm
腾讯云:https://www.qcloud.com/product/ssl