文档章节

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

xiaomin0322
 xiaomin0322
发布于 09/19 10:39
字数 1150
阅读 12
收藏 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
粉丝 108
博文 3550
码字总数 165463
作品 0
上海
架构师
https环境搭建配置(基于Tomcat和Nginx)

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

谭又中
2014/10/23
0
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
0
0
Linux Nginx之HTTPS网络安全访问服务

第1章 HTTPS网络安全访问服务 1.1 网络安全涉及的问题 1.1.1 数据机密性问题解决 1.1.1 数据完整性问题解决 1.1.1 身份验证问题解决 1.1.1 网络安全问题结论 1.2 网络安全证书 1.2.1 安全证书...

zack01
07/08
0
0
【大量干货】史上最完整的Tengine HTTPS原理解析、实践与调试

本文邀请阿里云CDN HTTPS技术专家金九,分享Tengine的一些HTTPS实践经验。内容主要有四个方面:HTTPS趋势、HTTPS基础、HTTPS实践、HTTPS调试。 一、HTTPS趋势 这一章节主要介绍近几年和未来H...

樰篱
05/29
0
0
Docker私有Registry在CentOS6.X下安装指南

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

白石
2014/12/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Go interface{} to string

package mainimport "fmt"func main() {var a interface{}a = "dsadjaldaldad"var b stringb = a.(string) // 话说,用人话说的话,这叫什么操作?fmt.Println(a, b)}...

taadis
29分钟前
0
0
数据库防火墙

数据库防火墙顾名思义是一款数据(库)安全设备,从防火墙这个词可以看出,其主要作用是做来自于外部的危险隔离。换句话说,数据库防火墙应该在入侵在到达数据库之前将其阻断,至少需要在入侵...

突突突酱
38分钟前
1
0
RDBMS 关系型数据库与 NoSQL 全面比较

随着互联网的不断发展,各种类型的应用层出不穷,所以导致在这个云计算的时代,对技术提出了更多的需求,主要体现在下面这四个方面: 低延迟的读写速度:应用快速地反应能极大地提升用户的满...

PeakFang-BOK
47分钟前
1
0
徒弟做了一个Python的实战小项目——银行系统

国际惯例:实践是检验真理的唯一标准。 众所周知,在编程过程中理论知识再充实也需要通过项目的炼金石。下面给大家看一下我徒弟做的一个小项目实战要求,是做一个银行系统,就是我们去银行办...

无也Python
54分钟前
2
0
vue.js响应式原理解析与实现

从很久之前就已经接触过了angularjs了,当时就已经了解到,angularjs是通过脏检查来实现数据监测以及页面更新渲染。之后,再接触了vue.js,当时也一度很好奇vue.js是如何监测数据更新并且重新...

peakedness丶
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部