1 数字证书概念

  • 在HTTPS的传输过程中,有一个非常关键的角色——数字证书,那什么是数字证书?又有什么作用呢?

  • 所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。数字证书拥有以下几个优点:

  • 使用数字证书能够提高用户的可信度 数字证书中的公钥,能够与服务端的私钥配对使用,实现数据传输过程中的加密和解密

  • 在证认使用者身份期间,使用者的敏感个人数据并不会被传输至证书持有者的网络系统上 X.509证书包含三个文件:key,csr,crt。

key【密钥/私钥 Private Key】是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
csr【证书认证签名请求 Certificate signing request】是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
crt【证书 Certificate】是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。

-req 产生证书签发申请命令
-newkey 生成新私钥 rsa:4096 生成秘钥位数
-nodes 表示私钥不加密
-sha256 使用SHA-2哈希算法
-keyout 将新创建的私钥写入的文件名
-x509 签发X.509格式证书命令。X.509是最通用的一种签名证书格式。
-out 指定要写入的输出文件名
-subj 指定用户信息
-days 有效期(3650表示十年)

2 基本流程

2.1 安装 openssl

yum install openssl -y

2.2 虚构一个CA认证机构

# 生成CA认证机构的证书密钥key
# 需要设置密码,输入两次
openssl>openssl genrsa -des3 -out ca.key 1024# 去除密钥里的密码(可选)
# 这里需要再输入一次原来设的密码
openssl>openssl rsa -in ca.key -out ca.key# 用私钥ca.key生成CA认证机构的证书ca.crt
# 其实就是相当于用私钥生成公钥,再把公钥包装成证书
openssl>openssl req -new -x509 -key ca.key -out ca.crt -days 365
# 这个证书ca.crt有的又称为"根证书",因为可以用来认证其他证书

2.3 生成网站的证书

用上面那个虚构出来的CA机构来认证,免费生成证书。

# 生成自己网站的密钥server.key (如果设置为 1024 会报错,SSL: error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small)
openssl>openssl genrsa -des3 -out server.key 2048# 生成自己网站证书的请求文件
# 如果找外面的CA机构认证,也是发个请求文件给他们
# 这个私钥就包含在请求文件中了,认证机构要用它来生成网站的公钥,然后包装成一个证书
openssl>openssl req -new -key server.key -out server.csr# 使用虚拟的CA认证机构的证书ca.crt,来对自己网站的证书请求文件server.csr进行处理,生成签名后的证书server.crt
# 注意设置序列号和有效期(一般都设1年)
openssl>openssl x509 -req -in server.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out server.crt -days 365

至此,私钥server.key和证书server.crt已全部生成完毕,可以放到网站源代码中去用了。

3 配置

在 nginx 的配置文件下,新建一个监听443的 server:

http{server{listen 443;#对应你的域名server_name test.com;ssl on;ssl_certificate /usr/local/nginx/cert/ssl.crt;ssl_certificate_key /usr/local/nginx/cert/ssl.key;ssl_session_timeout 5m;ssl_protocols TLSv1 TLSv1.1 TLSv1.2;ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;ssl_prefer_server_ciphers on;#如果是静态文件,直接指向目录,如果是动态应用,用proxy_pass转发一下location / {root /usr/local/service/ROOT;index index.html;}}#监听80端口,并重定向到443server{listen 80;server_name test.com;rewrite ^/(.*)$ https://test.com:443/$1 permanent;}
}

4 其他

关于nginx配置ssl https请求访问,出现下面错误

SSL_CTX_use_PrivateKey_file("/system/nginx/ssl/server.key") failed (routines:PEM_do_header:bad password read error:140B0009:SSLroutines:SSL_CTX_use_PrivateKey_file:PEM lib)

原因就是因为nginx启动的时候需要输入证书密码,解决办法是可以使用私钥来生成解密后的key来代替,效果是一样的(就跟ssh连接差不多),达到免密码重启的效果:

openssl rsa -in server.key -out server_unsecure.key

接下来只需要在nginx里面使用新的test_unsecure.key即可使用https连接了

openssl生成自签名证书流程相关推荐

  1. 基于 OpenSSL 生成自签名证书,数字签名,泛域名证书,ca证书,PKI等

    基于 OpenSSL 生成自签名证书_qhh0205-CSDN博客_openssl自签名证书 windows 下 nginx 双向认证自签名证书配置 windows 下 nginx 双向认证自签名证书 ...

  2. Openssl生成自签名证书并导入浏览器脚本

    Openssl生成自签名证书并导入浏览器 使用说明 1. 准备工作 2. 脚本 3. 导入浏览器 4. 使用证书 使用说明 环境:Centos 7 运行脚本后可以生成根证书.自签名证书(可以指定域名或 ...

  3. 使用OpenSSL生成自签名证书和格式转换

    OpenSSL安装:https://blog.csdn.net/qq_44734154/article/details/125995475 一.生成证书私钥 genrsa 介绍:https://www ...

  4. openssl生成自签名证书

    2019独角兽企业重金招聘Python工程师标准>>> 生成CA证书,自己做CA openssl req -new -x509 -keyout ca.key -out ca.crt ...

  5. Openssl 生成自签名证书

    最近在调试Ingress需要使用多份证书,对证书的生成和使用做了简单的整理. 不用翻垃圾桶一条过 #!/bin/sh output_dir="/opt/suops/k8s/ingress-f ...

  6. CentOS生成自签名证书配置Apache https

    CentOS生成自签名证书配置Apache https apache的安装就不用说了 1.安装完apache之后,安装mod_ssl和openssl yum install mod_ssl opens ...

  7. 生成自签名证书:生成证书和秘钥

    生成证书和秘钥 简单生成的方法: 1.mkdir  /certs 2.cd  /certs 3.生成自签名证书 sudo openssl req -newkey rsa:2048 -new -node ...

  8. 生成自签名证书步骤(一)

    ## 1. 方式一 1. 创建一个目录如Mytest, 进入该目录, 在该目录下打开命令行窗口 2. 启动openssl ```shell openssl    # 执行该命令即可 ``` 3. 使用 ...

  9. 生成服务器证书 启用HTTPS 生成自签名证书

    HTTPS的传输过程需要使用公私钥对收发数据进行加密,为了防止中间人攻击,需要在服务器端配置证书,通常,证书由可信的CA(Certificate Authority,数字证书认证中心)机构颁发,但是需 ...

  10. Ubuntu18.04 使用 openssl制作自签名证书

    执行"openssl verison",判断系统是否已安装openssl,若没有安装,请使用apt安装openssl. 一.图解自签名过程 二.关于 CRT PEM KEY CST ...

最新文章

  1. 生成多文件的Assembly 的两种方法
  2. MySQL查看表中的约束
  3. Spring Boot——SpringMVC带URL前缀的静态资源解决方案
  4. 只会python怎么挣钱_业余学python有用吗
  5. SpringCloud学习笔记021---SpringBoot修改内部Tomcat默认端口
  6. 15个Java的报表工具简介
  7. cs七龙珠机器人_CS七龙珠机器人的命令
  8. 小程序获取用户的openid(详解)
  9. 自己的作品界面---类似360杀毒软件的界面
  10. 达梦数据库 年月周查询
  11. word2007中编辑页眉,那个横线怎么去掉?
  12. JavaScript变量提升(Hoisting)详解
  13. 职称计算机考试输入破折号,2015职称计算机考试Dreamweaver考前测试题及答案
  14. MySQL主从一致的校验
  15. hive -- 协同过滤sql语句
  16. C语言马克思手稿中有这样一道趣味数学题
  17. 计算机高级职称考试笔试题,计算机高级职称考试题目及答案
  18. 寓言之政府和计划生育——写在30年后的又一次改革——上海自贸区的成立
  19. 哪个更适合数据分析:R 还是 Python?
  20. C语言:计算从1加到100的值

热门文章

  1. vs 发生错误,需要终止调试... HRESULT=0x8000ffff。ErrorCode=0x0 解决办法
  2. 荣耀手机总显示无法连接服务器,荣耀继承者无法连接服务器是什么原因
  3. 无法定位程序输入点dxgiget_无法定位程序输入点于动态链接库dxgi.dll上怎么解决?-51dll帮助...
  4. H5 在iPhone真机上调试H5页面
  5. 产品必备-用户故事模板
  6. PC版免费京东全民营业自动化做任务脚本(多号版)
  7. 计算机编码器的工作原理,优先级编码器74LS148的电路结构、工作原理及使用方法...
  8. 关键点提取:单目3D检测的点睛之笔
  9. 年薪百万的市场人都在读哪些书?
  10. ArcGISServer 发布地理处理服务:以CAD数据至地理数据库为例(1)CAD转至地理数据库