了解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

相关文章

Linux 安装、配置Tomcat 的HTTPS

Linux 安装 、配置Tomcat的HTTPS 安装Tomcat 这里选择的是 tomcat 10.X ,需要Java 11及更高版本 Binary Distributions ->Core->选择 tar.gz包 下载、上传到内网服务器 /opt 目录tar -xzf 解压将解压的根目录改名为 tomat-10 并移动到 /opt 下, 形成个人习惯的路径 /opt/tomcat-10

iOS HTTPS证书不受信任解决办法

之前开发App的时候服务端使用的是自签名的证书,导致iOS开发过程中调用HTTPS接口时,证书不被信任 - (void)URLSession:(NSURLSession *)session didReceiveChallenge:(NSURLAuthenticationChallenge *)challenge completionHandler:(void (^)(NSURLSessionAu

@ControllerAdvice:你可以没用过,但是不能不了解

1.概述 最近在梳理Spring MVC相关扩展点时发现了@ControllerAdvice这个注解,用于定义全局的异常处理、数据绑定、数据预处理等功能。通过使用 @ControllerAdvice,可以将一些与控制器相关的通用逻辑提取到单独的类中进行集中管理,从而减少代码重复,提升代码的可维护性。 定义如下 /*** Specialization of {@link Component @

Xcode7 Https 在plist上添加NSAppTransportSecurity -NSAllowsAtbritraryLoads

Xcode7 创建HTTP请求报错 字数825  阅读8989  评论1  喜欢17 最近在Xcode 7中向服务器发送请求访问JSON数据时, 控制台打印了以下错误信息: Application Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure.

jmeter测试https请求

公司最近在搞全站HTTPS改造,进一步提高网站的安全性,防止运营商劫持。那么,改造完成后,所有前后端的URL将全部为https。 So ,研究下怎么用Jmeter访问https请求呢。 其实很简单, 第一步在jmeter中创建HTTP请求,如下图进行配置,https端口为443; 第二步,在本机浏览器,如Chrome中导入该域名证书,在更多工具-设置-管理证书的地方,找到该证书,导出到本地。然后在

安全科普:理解SSL(https)中的对称加密与非对称加密

今天刚好为站点的后台弄了下https,就来分享我了解的吧。 密码学最早可以追溯到古希腊罗马时代,那时的加密方法很简单:替换字母。 早期的密码学:   古希腊人用一种叫 Scytale 的工具加密。更快的工具是 transposition cipher—:只是把羊皮纸卷在一根圆木上,写下信息,羊皮纸展开后,这些信息就加密完成了。 虽然很容易被解密,但它确实是第一个在现实中应用加密的

OkHttp遇到Https

转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/48129405;  本文出自:【张鸿洋的博客】 一、概述 其实这篇文章理论上不限于okhttp去访问自签名的网站,不过接上篇博文了,就叫这个了。首先要了解的事,okhttp默认情况下是支持https协议的网站的,比如https://www.baidu.com,https

【从0实现React18】 (四) 如何触发更新 带你了解react触发更新的流程以及更新后如何触发render

常见的触发更新的方式 创建 React 应用的根对象 ReactDOM.creatRoot().render();类组件 this.setState();函数组件 useState useEffect; 我们希望实现一套统一的更新机制,他的特点是: 兼容上述触发更新的方式方便后续拓展(优先级机制) 更新机制的组成部分 代表更新的数据结构 Update消费update的数据结构——Up

http:与https:到底有哪些区别?

http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。http的连接很简单,是无状态的,... HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全

简单了解ESD模型与TLP曲线

上文讲了ESD和EOS的区别,说实话远不止那些。今日再稍加深入的介绍ESD。 一 ESD原理 ESD-Electro Static Discharge静电放电,具有不同静电电位的物体互相靠近或者直接接触引起的电荷转移。正常情况下,物体内部的正负电荷是相等的,对外表现不带电。当任何两种不同材质的物体接触后再分离就会产生静电。当正负电荷逐渐累计到一定程度时,将与周围环境产生电位差,从而使电荷经由放