了解HTTPS和数字证书

2024-06-19 10:48
文章标签 https 了解 数字证书

本文主要是介绍了解HTTPS和数字证书,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

也许你经过一段时间的了解,已经知道基于数字证书的身份认证方式是符合等级保护条例的双因素认证方式,而且是安全性比较高的认证方式。你决定要使用数字证书来实现业务系统的用户登录,你现在要了解如何使用数字证书实现用服务器认证和户身份认证。

通过实验搭建一个测试CA系统,颁发服务器证书和用户证书,实现用户基于证书登录。

做完实验,你也许会对目前web服务支持的认证策略感到失望。

实验内容:

  1. 搭建Openssl CA环境,签发服务器证书和客户端证书。
  2. nginx,安装nginx,配置HTTPS发布,且被浏览器认证通过。
  3. 设置客户端认证。

搭建CA,并签发证书

步骤如下:

1.生成ROOT CA 的私钥

2.用私钥签发CA的自签根证书

3.配置CA的发布环境,CRL文件、index文件、证书发布目录等

4.签发服务端证书

5.签发客户端证书

下载并安装openssl

# openssl 下载页面 https://www.openssl.org/source/,cd /home &&wget https://www.openssl.org/source/openssl-1.1.1g.tar.gztar xvf openssl-1.1.1g.tar.gzcd openssl-1.1.1g./config --prefix=/usr/local/opensslmake && make install

创建pki目录,作为CA系统的目录

mkdir /home/pkicd /home/pkimkdir certs private crltouch index.txtecho '01' > serialcp /usr/local/openssl/ssl/openssl.cnf /home/pkichmod 700 /home/pki/private#生成 根密钥openssl genrsa -aes256 -out /home/pki/private/ca_root.key 2048# 生成root证书请求openssl req -new -key /home/pki/private/ca_root.key -out /home/pki/ca.csr# req信息在openssl.cnf 中定义,-conf openssl.cnf,修改当前目录下cnf文件
# 不加-conf系统默认的conf,在拷贝的原文件位置/usr/local/openssl/ssl/openssl.cnfopenssl x509 -req -sha256 -days 3650 -in /home/pki/ca_root.csr -signkey /home/pki/private/ca_root.key -out /home/pki/certs/ca_root.pem

有关ca根的配置,修改当前目录下的openssl.cnf文件。

# 修改openssl.cnf [ CA_default ] 设置ca的证书和私钥# certificate     = $dir/certs/ca_cert.pem# private_key     = $dir/private/ca_root.key# 设置[CA_default]的相关路径,指向当前的路径

openssl.cnf文件用法

openssl的默认参数在openssl.cnf文件中配置。openssl命令行 req/x509/ca三个命令。req、x509 2个命令是用来处理数字证书,ca命令是包含证书的签发和撤销,同步更新index文件和crl文件。前2个命令独立命令,而ca是一个更系统的命令。

req,x509,ca命令都可以用 -config config文件,指明文件路径,设置默认参数,也可以在命令行中显示传递参数。config文件采用[ca][req]的方式,设置相关参数,由[]开始,到下一个[]之间,是这个标签的参数。

生成root证书,采用req命令 使用到config文件[req]段中的配置,x509_extensions = v3_ca扩展项定义basicConstraints=CA:true,基本约束定义了签发CA证书。

在config文件中,定义[usr_cert],采用用户的默认扩展设置。

可以在config中定义[server_cert]服务器证书扩展,也可以采用单独的扩展文件。服务器扩展中定义subject alternative name,服务端通过设置SAN(subject alternative name)的方式,实现将域名或者ip地址写入到证书中。

使用独立的扩展文件,创建并编辑server.extensions.cnf文件。

basicConstraints=CA:FALSEsubjectAltName=@my_subject_alt_namessubjectKeyIdentifier = hashnsCertType = servernsComment = "OpenSSL Generated Server Certificate"authorityKeyIdentifier = keyid,issuer:alwayskeyUsage = critical, digitalSignature, keyEnciphermentextendedKeyUsage = serverAuth[ my_subject_alt_names ]DNS.1 = www.website.com

命令行如下,生成客户端证书,通过-extensions显示覆盖config文件中x509_extensions变量

openssl ca -config openssl.cnf -out certs/server.crt -extfile server.extensions.cnf -in server.csr

生成客户端证书,采用extensions命令行覆盖openssl.cnf定义的[req]段中x509_extension字段。

openssl ca -config openssl.cnf -extensions usr_client -out certs/client.crt  -in client.csr

将客户端证书转换成p12文件

openssl pkcs12 -export -clcerts -in certs/client.crt -inkey private/client.key -out client.p12

生成p12文件时,需要设置口令,这个口令是安装p12时需要的解密口令。口令保护p12文件中的私钥,和私钥的对称加密含义还不太一样,可以继续做实验,完成user证书加密密钥保护,在https认证时的作用。

配置NGINX 服务器

重新编译NGINX,支持https。

cd /usr/local/src &&tar -zxvf nginx-1.17.6.tar.gz &&cd nginx-1.17.6 &&./configure --sbin-path=/usr/local/nginx/nginx \--conf-path=/usr/local/nginx/nginx.conf \--pid-path=/usr/local/nginx/nginx.pid \--with-http_ssl_module \--with-pcre=/usr/local/src/pcre-8.43 \--with-zlib=/usr/local/src/zlib-1.2.11 \--with-openssl=/home/openssl-1.1.1g &&make &&make install

设置nginx.conf文件,开启https,并设置客户端认证,客户端认证以root发布的证书  

  # HTTPS server#server {listen       443 ssl;server_name  localhost;ssl_certificate      /home/pki/server.crt;ssl_certificate_key  /home/pki/private/server.key;ssl_session_cache    shared:SSL:1m;ssl_session_timeout  5m;ssl_ciphers  HIGH:!aNULL:!MD5;ssl_prefer_server_ciphers  on;ssl_client_certificate /home/pki/certs/ca_cert.pem;ssl_verify_client on;ssl_verify_depth 1;location / {root   html;index  index.html index.htm;}}

配置好证书,访问服务器时,chrome浏览器会弹出响应的证书。

参考文献一:

  1. HTTPS双向认证指南https://www.jianshu.com/p/2b2d1f511959?utm_campaign=haruki
  2. 编辑 openssl 文件 https://wangbin.io/blog/it/https-ca.html
  3. 自建CA及签发证书 http://www.dp2u.com/2019/linux-openssl-CA-and-Server-Certificate.html
  4. extionsion 文件 https://blog.csdn.net/u011893782/article/details/106227305
  5. 创建中间CA  https://blog.csdn.net/qq405052998/article/details/53168959

 

参考文献:

1. 使用 openssl 生成证书 https://blog.csdn.net/ljskr/article/details/84570254

2.centos 安装nginx https://www.cnblogs.com/zhizihuakai/p/12055618.html

3. chrome 自定义证书 https://www.dazhuanlan.com/2019/12/07/5deaeed8b1ba2/?__cf_chl_jschl_tk__=b347b45d3758c90ea83b9d1e773ec880fa241d0d-1589641153-0-ATRts0hr1eV8S6r6S3Z6n_QM2S8H9WDta8NBfRTUXE1mhOe3XnfpjHjx9oJtoHG_-d4hICmaBK7LMAuexL4KfY8CyStRnSD1aKCFAIx4_B4oTx73HjZO9JY-JaNxBwkslEVGulJqQNgzoK6vJm7jamfJvOle4rnh_iPRXn-0QJspvt7sX4a2-263n5RcEXw3iBcj2uhHuYpVdpKOjSDQO8D2Z9Y6H5YijBZaf8C-wxNujVMEFBCePvfHdDT1K6A8XWiC59LxJQk5c1EB8Tss30HxeDqLQLIy8leuRIth2o3WIkAz54U4eA6sRVQcHS4Gxg

4. nginx 双向证书 https://serverfault.com/questions/938269/nginx-client-cert-verification-ssl-client-certificate-vs-ssl-trusted-certificat

5.ssl_client_certificate https://blog.51cto.com/tchuairen/1782945

6.php 获得证书CN https://cloud.tencent.com/developer/ask/127591

7. php 获得证书https://blog.51cto.com/gdutcxh/2121507

8.http://nginx.org/en/docs/http/ngx_http_ssl_module.html#var_ssl_client_raw_cert

9.redhead资源文件解决签发ca证书 https://access.redhat.com/solutions/28965

10.github 文章 https://gist.github.com/croxton/ebfb5f3ac143cd86542788f972434c96

11. https://gist.github.com/Soarez/9688998

12.How to install OpenSSL on CentOS RedHat Linux, How to configure OpenSSL on CentOS RedHat Linux http://dev.antoinesolutions.com/openssl

 

 

这篇关于了解HTTPS和数字证书的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1074818

相关文章

关于数据埋点,你需要了解这些基本知识

产品汪每天都在和数据打交道,你知道数据来自哪里吗? 移动app端内的用户行为数据大多来自埋点,了解一些埋点知识,能和数据分析师、技术侃大山,参与到前期的数据采集,更重要是让最终的埋点数据能为我所用,否则可怜巴巴等上几个月是常有的事。   埋点类型 根据埋点方式,可以区分为: 手动埋点半自动埋点全自动埋点 秉承“任何事物都有两面性”的道理:自动程度高的,能解决通用统计,便于统一化管理,但个性化定

速了解MySQL 数据库不同存储引擎

快速了解MySQL 数据库不同存储引擎 MySQL 提供了多种存储引擎,每种存储引擎都有其特定的特性和适用场景。了解这些存储引擎的特性,有助于在设计数据库时做出合理的选择。以下是 MySQL 中几种常用存储引擎的详细介绍。 1. InnoDB 特点: 事务支持:InnoDB 是一个支持 ACID(原子性、一致性、隔离性、持久性)事务的存储引擎。行级锁:使用行级锁来提高并发性,减少锁竞争

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法

消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法   消除安卓SDK更新时的“https://dl-ssl.google.com refused”异常的方法 [转载]原地址:http://blog.csdn.net/x605940745/article/details/17911115 消除SDK更新时的“

PHP: 深入了解一致性哈希

前言 随着memcache、redis以及其它一些内存K/V数据库的流行,一致性哈希也越来越被开发者所了解。因为这些内存K/V数据库大多不提供分布式支持(本文以redis为例),所以如果要提供多台redis server来提供服务的话,就需要解决如何将数据分散到redis server,并且在增减redis server时如何最大化的不令数据重新分布,这将是本文讨论的范畴。 取模算法 取模运

3.比 HTTP 更安全的 HTTPS(工作原理理解、非对称加密理解、证书理解)

所谓的协议 协议只是一种规则,你不按规则来就无法和目标方进行你的工作 协议说白了只是人定的规则,任何人都可以定协议 我们不需要太了解细节,这些制定和完善协议的人去做的,我们只需要知道协议的一个大概 HTTPS 协议 1、概述 HTTPS(Hypertext Transfer Protocol Secure)是一种安全的超文本传输协议,主要用于在客户端和服务器之间安全地传输数据

Weex入门教程之1,了解Weex

【资料合集】Weex Conf回顾集锦:讲义PDF+活动视频! PDF分享:链接:http://pan.baidu.com/s/1hr8RniG 密码:fa3j 官方教程:https://weex-project.io/cn/v-0.10/guide/index.html 用意 主要是介绍Weex,并未涉及开发方面,好让我们开始开发之前充分地了解Weex到底是个什么。 以下描述主要摘取于

Java了解相对较多!

我是对Java了解相对较多,而对C#则是因工作需要才去看了一下,C#跟Java在语法上非常相似,而最初让我比较困惑的就是委托、事件部分,相信大多数初学者也有类似的困惑。经过跟Java的对比学习,发现这其实跟Java的监听、事件是等同的,只是表述上不同罢了。   委托+事件是观察者模式的一个典型例子,所谓的委托其实就是观察者,它会关心某种事件,一旦这种事件被触发,这个观察者就会行动。   下

使用WebP解决网站加载速度问题,这些细节你需要了解

说到网页的图片格式,大家最常想到的可能是JPEG、PNG,毕竟这些老牌格式陪伴我们这么多年。然而,近几年,有一个格式悄悄崭露头角,那就是WebP。很多人可能听说过,但到底它好在哪?你的网站或者项目是不是也应该用WebP呢?别着急,今天咱们就来好好聊聊WebP这个图片格式的前世今生,以及它值不值得你花时间去用。 为什么会有WebP? 你有没有遇到过这样的情况?网页加载特别慢,尤其是那

初步了解VTK装配体

VTK还不太了解,根据资料, vtk.vtkAssembly 是 VTK库中的一个重要类,允许通过将多个vtkActor对象组合在一起来创建复杂的3D模型。 import vtkimport mathfrom vtk.util.colors import *filenames = ["cylinder.stl","sphere.stl","torus.stl"]dt = 1.0renW

HTTP协议 HTTPS协议 MQTT协议介绍

目录 一.HTTP协议 1. HTTP 协议介绍 基本介绍: 协议:  注意: 2. HTTP 协议的工作过程 基础术语: 客户端: 主动发起网络请求的一端 服务器: 被动接收网络请求的一端 请求: 客户端给服务器发送的数据 响应: 服务器给客户端返回的数据 HTTP 协议的重要特点: 一发一收,一问一答 注意: 网络编程中,除了一发一收之外,还有其它的模式 二.HTT