文档章节

HTTPS证书验证流程及SSL证书生成步骤【附nginx开启https配置】

xiaomin0322
 xiaomin0322
发布于 2018/09/19 10:39
字数 1150
阅读 79
收藏 6

------------------------------------------------------------

HTTPS证书验证流程(极简化版)
    1.客户端向服务端请求证书(server.crt)
    2.服务端下发证书(server.crt)
    3.客户端用预制的受信任机构的证书(ca.crt)来验证服务端下发的证书(server.crt)是否合法,并且还会校验下发下来的证书里的域名与要请求的域名是否一致
    【以下步骤开启双向验证后才会触发】
    4. 客户端选择一个由受信任的机构(ca.crt)颁发的证书(client.crt)发送给服务端
    5.服务端用预制的受信任机构的证书(ca.crt)来验证客户端传来的证书(client.crt)是否合法

-----------------------------------------------------------------

以下是证书生成步骤及说明:

------------------------CA证书-------------------------------

1. 创建根证书密钥文件(自己做CA)ca.key:
    openssl genrsa -des3 -out ca.key 2048
    #去除密码
    openssl rsa -in ca.key -out ca.key

2. 创建根证书的申请文件ca.csr:
    openssl req -new -key ca.key -out ca.csr

3. 创建一个自当前日期起为期十年的根证书ca.crt【用来签名其它证书,并配置在客户端信任列表,如果开启双向验证,也需要配置在服务端】:
    openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey ca.key -in ca.csr -out ca.crt

------------------------Server端要下发的证书---------------------------------
4. 创建服务器证书密钥server.key:
    openssl genrsa -des3 -out server.key 2048
    #去除密码
    openssl rsa -in server.key -out server.key

5. 创建服务器证书的申请文件server.csr:
    openssl req -new -key server.key -out server.csr

6. 创建自当前日期起有效期为期两年的服务器证书server.crt【配置在服务端,将会在客户端请求时下发给客户端】:
    openssl x509 -req -days 730 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in server.csr -out server.crt


------------------------Client端要下发的证书【开启双向验证后才需要】---------------------------------
7. 创建客户端证书密钥文件client.key:
    openssl genrsa -des3 -out client.key 2048
    #去除密码
    openssl rsa -in client.key -out client.key

8. 创建客户端证书的申请文件client.csr:
    openssl req -new -key client.key -out client.csr

9. 创建一个自当前日期起有效期为两年的客户端证书client.crt【配置在客户端】:
    openssl x509 -req -days 730 -sha1 -extensions v3_req -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial -in client.csr -out client.crt

------------------------各种格式转换---------------------------------

a. crt+key转pfx【pfx是证书安装包,方便在电脑上直接双击按向导安装证书】
    openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx

b. pfx转化为pem【curl需要pem格式文件】
    openssl pkcs12 -in client.pfx -nodes -out client.pem

c. crt+key转p12【apache的cxf客户端支持jks和p12证书】
    openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

d. crt转jks【jks支持存放信任证书,而pkcs12不支持,所以tomcat环境下配置ca只能使用jks才能保证ca密钥不泄露】
    keytool -import -v -trustcacerts -storepass defaultpwd -keypass defaultpwd -file ca.crt -keystore ca_only.jks

---------------------------------------------------------
关于创建证书的申请文件(.csr)时的输入内容
    Country Name (2 letter code) [AU]:CN【国家代号,中国输入CN】
    State or Province Name (full name) [Some-State]:BeiJing【省的全名,拼音】
    Locality Name (eg, city) []:BeiJing【市的全名,拼音】
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:MyCompany Corp.【公司英文名】
    Organizational Unit Name (eg, section) []: 【可以不输入】
    Common Name (eg, YOUR name) []:【对于server.csr需要输入网站的域名以作校验,其余的csr可随意填写】
    Email Address []:admin@mycompany.com【电子邮箱,可随意填】

    Please enter the following ‘extra’ attributes
    to be sent with your certificate request
    A challenge password []:【可以不输入】
    An optional company name []:【可以不输入】

---------------------------------------------------------
多域名及域名通配符的支持方案
    域名通配符:
        “*”号为域名通配符,域名通配符仅作用在同级域名下,无法跨级
        例如:*.mydomain.com可匹配a.mydomain.com、b.mydomain.com等域名,不可匹配mydomain.com、a.b.mydomain.com等域名

    多域名:
        在生成server.crt的步骤添加如下参数:
            -extensions ext -extfile mydomain.com.ini

mydomain.com.ini文件内容:

 
  1. [ ext ]

  2. subjectAltName = @dns

  3.  
  4. [ dns ]

  5. DNS.1 = mydomain.com

  6. DNS.2 = *.mydomain.com

-----------------------nginx开启https配置--------------------------

 

 
  1. server {

  2. #上线请将端口改为默认443

  3. listen 8443 ssl;

  4. server_name your_domain;

  5. index index.html index.htm;

  6.  
  7. ssl on;

  8. ssl_certificate /your/certs/path/server.crt;

  9. ssl_certificate_key /your/certs/path/server.key;

  10.  
  11. #以下两行注释用来开启双向验证

  12. #ssl_client_certificate /your/certs/path/ca.crt;

  13. #ssl_verify_client on;

  14.  
  15. ssl_session_timeout 5m;

  16.  
  17. location /your_https_path/ {

  18. proxy_pass_header Server;

  19. proxy_set_header Host $http_host;

  20. proxy_set_header X-Real-IP $remote_addr;

  21. proxy_set_header X-Scheme $scheme;

  22. proxy_pass http://your_http_host:port/your_http_path/;

  23. }

  24.  
  25. }

 

-------------------------tomcat开启https配置【clientAuth用来开启双向验证】-----------------------------------

 

 
  1. <Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"

  2. maxThreads="150" SSLEnabled="true" scheme="https" secure="true"

  3. clientAuth="true" sslProtocol="TLS"

  4. keystoreType="PKCS12"

  5. keystoreFile="c:/server/certs/path/server.p12" keystorePass="defaultpwd"

  6. truststoreType="JKS"

  7. truststoreFile="c:/ca/certs/path/ca_only.jks" truststorePass="defaultpwd" />

本文转载自:https://blog.csdn.net/witmind/article/details/78456660

xiaomin0322
粉丝 146
博文 3916
码字总数 199288
作品 0
上海
架构师
私信 提问
https环境搭建配置(基于Tomcat和Nginx)

一、基于Tomcat、JDK内置密钥工具: 1、生成服务端证书库(keystore证书库文件),用于客户端验证服务端的真实性 keytool -genkey -v -alias key_server -keyalg RSA -keystore e:server.keys...

谭又中
2014/10/23
6.7K
6
Nginx + https + 免费SSL证书配置指南

生成证书 $ cd /usr/local/nginx/conf $ openssl genrsa -des3 -out server.key 1024 $ openssl req -new -key server.key -out server.csr $ cp server.key server.key.org $ openssl rsa -......

神勇小白鼠
2011/05/12
2.4K
0
修改Nginx配置实现https请求

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/u012843873/article/details/91521717 一、Linux下生成Https的crt和k...

灌南高手No1
06/12
0
0
现在就启用 HTTPS,免费的!

从现在开始,你应该可以在浏览器地址栏https://konklone.com的旁边,看到一个令人可喜的的锁了。因为我已经在这个站点启用了https,我没有为此付任何费用。 为什么你会厌烦做同样的事: SSL不...

oschina
2013/09/26
60.1K
50
Docker私有Registry在CentOS6.X下安装指南

(WJW)Docker私有Registry在CentOS6.X下安装指南 说明: 这是docker registry服务器的域名也就是你的公司docker私有服务器的主机地址,假定ip是;因为https的SSL证书不能用IP地址,我就随便起了...

白石
2014/12/12
2.4K
0

没有更多内容

加载失败,请刷新页面

加载更多

小知识:讲述Linux命令别名与资源文件的区别

别名 别名是命令的快捷方式。为那些需要经常执行,但需要很长时间输入的长命令创建快捷方式很有用。语法是: alias ppp='ping www.baidu.com' 它们并不总是用来缩短长命令。重要的是,你将它...

老孟的Linux私房菜
41分钟前
3
0
《JAVA核心知识》学习笔记(6. Spring 原理)-5

它是一个全面的、企业应用开发一站式的解决方案,贯穿表现层、业务层、持久层。但是 Spring 仍然可以和其他的框架无缝整合。 6.1.1. Spring 特点 6.1.1.1. 轻量级 6.1.1.2. 控制反转 6.1.1....

Shingfi
42分钟前
5
0
Excel导入数据库数据+Excel导入网页数据【实时追踪】

1.Excel导入数据库数据:数据选项卡------>导入数据 2.Excel导入网页数据【实时追踪】:

东方墨天
50分钟前
5
1
正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置

正则表达式如何匹配一个单词存在一次或零次并且不占捕获组位置 今天要用正则表达式实现匹配一个词出现一次或者不出现的情况,但是又不仅仅是这么简单的需求。先详细说下我这种情况吧,也许有...

Airship
56分钟前
6
0
第八讲:asp.net C# web 读取文件

本讲主要讲解如何在asp.net页面上传文件。 首先,前台页面: 其次,后台页面: 结果: 1、前台效果: 2、后台结果:

刘日辉
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部