使用openssl自签ssl证书

注:自签的证书只是在测试环境中使用 (此节看看就好),实际线上环境的证书请参考下节 <自检ssl证书被浏览器提示非安全证书>

  1. 首先,进入你想创建证书和私钥的目录,例如:
    cd /alidata/server/nginx-1.4.4/csr3
  1. 创建服务器私钥,生成RSA密钥,命令会让你输入一个口令:
    openssl genrsa -des3 -out server.key 1024
    nginx使用https做访问 - 图1
    将会看到此目录多了个 server.key
  1. (使用者)创建签名请求证书CSR
    可以简单理解成公钥,生成证书时要把这个提交给权威的证书颁发机构
    (注:CommonNam请填写域名,否则会引起浏览器警报)
    openssl req -new -key server.key -out server.csr
    nginx使用https做访问 - 图2
    将会看到此目录多了个 server.csr
  1. (颁发者)创建一个自己签署的CA证书: (注:Common Name 请填写域名,否则会引起浏览器警报)
    openssl req -new -x509 -days 3650 -key server.key -out server.crt
    nginx使用https做访问 - 图3
    将会看到此目录多了个 server.crt
  1. 最后标记证书使用上述私钥和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

  1. 修改Nginx配置文件,让其包含新标记的证书和私钥:

    1. server {
    2. server_name localhost;
    3. root /alidata/www/phpwind/ceshi;
    4. listen 443;
    5. ssl on;
    6. # 符合PFS规范的加密套餐
    7. ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    8. # 需要在服务端TLS协议中启用TLS1.2
    9. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    10. ssl_certificate /alidata/server/nginx-1.4.4/csr3/server.crt;
    11. ssl_certificate_key /alidata/server/nginx-1.4.4/csr3/server.key;
    12. }
  2. 重启nginx。这样就可以访问了。

  3. 另外还可以加入如下代码实现80端口重定向到443:

    1. server {
    2. listen 80;
    3. server_name localhost;
    4. rewrite ^(.*) https://$server_name$1 permanent;
    5. }

查看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