随笔 - openssl证书的生成和使用

本文涉及的产品
Digicert DV 单域名(免费证书),20个 3个月
简介: 证书类别 - 根证书 生成服务器证书,客户端证书的基础。自签名。 - 服务器证书 由根证书签发。

证书类别
- 根证书 生成服务器证书,客户端证书的基础。自签名。
- 服务器证书 由根证书签发。配置在服务器上。
- 客户端证书 由根证书签发。配置在服务器上,并发送给客户,让客户安装在浏览器里。

要注意,
1. 服务器证书的cn要和servername一致,否则启动httpd时有警告。
2. 浏览器安装客户端证书时,需要用pkcs12转换成pfx格式,否则可以安装但无效。
3. 把根证书安装到浏览器的受信CA中,访问服务器时就不会出警告了。


环境: CentOS6_x64 openssl 1.0.1 apache2.2

准备

echo -n > /etc/pki/CA/index.txt
echo '00' > /etc/pki/CA/serial

注意,index.txt需要初始化为0字节,连换行也不能有。

1 根证书

# 修改/etc/pki/tls/openssl.cnf,放开nsCertType= server的注释。
[ usr_cert ]
nsCertType = server

cd /etc/pki/CA
# 生成密钥
openssl genrsa -out private/myCA.key 1024
# 生成自签名证书
openssl req -new -x509 -key private/myCA.key -out certs/myCA.crt

把这个crt导入客户端浏览器,就不会显示证书警告了。

2 服务器证书

cd /etc/pki/tls
openssl genrsa -out private/sv.key 1024
# 生成请求
openssl req -new -key private/sv.key -out private/sv.csr
# 使用根证书签名
openssl ca -in private/sv.csr -keyfile ../CA/private/myCA.key -cert ../CA/certs/myCA.crt -out certs/sv.crt

有时,签发多个证书时,由于common name等信息重复导致签名失败,
可以初始化index.txt和serial。

3 客户端证书

# 修改/etc/pki/tls/openssl.cnf,注释掉nsCertType= server,去掉的nsCertType = client, email注释。
[ usr_cert ]
nsCertType = client, email

cd /etc/pki/tls
openssl genrsa -out private/clnt1.key 1024
openssl req -new -key private/clnt1.key -out private/clnt1.csr
openssl ca -in private/clnt1.csr -keyfile ../CA/private/myCA.key -cert ../CA/certs/myCA.crt -out certs/clnt1.crt

个人证书需要转成pfx格式

openssl pkcs12 -export -in certs/clnt1.crt -out certs/clnt1.pfx -inkey private/clnt1.key

apache 配置

SSLCertificateFile /etc/pki/tls/certs/sv.crt
SSLCertificateKeyFile /etc/pki/tls/private/sv.key
SSLCertificateChainFile /etc/pki/tls/certs/chain.crt      <--这个从哪儿来的?
SSLCACertificateFile /etc/pki/tls/certs/myCA.crt

    SSLVerifyClient require
    SSLVerifyDepth  1

nginx配置

    server {
        listen       443 ssl;
        server_name  localhost;
        ssl_certificate      /etc/pki/tls/certs/sv2.crt;
        ssl_certificate_key  /etc/pki/tls/private/sv2.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        ssl_client_certificate /etc/pki/CA/certs/myCA.crt;
        ssl_verify_client on;
        ssl_verify_depth 1;

另外,遇到了证书不能删除的问题。解决方法是:
使用mmc,进入 证书,即可删除。

windows上配置nginx时,可能遇到缓存等模块不可用的情况,
需要注释掉ssl_session_cache等。

生成dh参数:

dhparam -out dh1024.pem 1024
目录
相关文章
|
存储 芯片 内存技术
DRAM集中刷新,分散刷新,异步刷新的区别
DRAM集中刷新,分散刷新,异步刷新的区别
1652 0
|
11月前
|
安全 Ubuntu Shell
深入解析 vsftpd 2.3.4 的笑脸漏洞及其检测方法
本文详细解析了 vsftpd 2.3.4 版本中的“笑脸漏洞”,该漏洞允许攻击者通过特定用户名和密码触发后门,获取远程代码执行权限。文章提供了漏洞概述、影响范围及一个 Python 脚本,用于检测目标服务器是否受此漏洞影响。通过连接至目标服务器并尝试登录特定用户名,脚本能够判断服务器是否存在该漏洞,并给出相应的警告信息。
692 84
|
8月前
|
弹性计算 人工智能 API
部署AI网站-进阶配置
通过Open WebUI部署个人AI网站后,您可能还面临如下问题:希望使用DeepSeek R1模型对话问答时显示思考过程、 希望可以在AI网站上使用联网搜索、希望将AI网站分享给其他用户使用、希望在AI主页上使用多种模型等。本文将介绍如何通过相应配置,解决这些问题。
|
8月前
|
弹性计算 API Docker
在ECS上使用百炼部署满血版DeepSeek R1
本文为您介绍如何在ECS实例上部署Open WebUI,并通过大模型服务平台百炼API调用DeepSeek-R1模型推理服务。帮助您快速体验满血版DeepSeek-R1模型。
|
JSON 关系型数据库 MySQL
MySQL 5.x和8.0区别
性能:8.0的速度要比5.7快2倍,8.0在以下方面带来了更好的性能:读/写负载、IO密集型工作负载、高竞争("hot spot"热点竞争问题)工作负载。
481 3
|
设计模式 人工智能 JSON
一文掌握大模型提示词技巧:从战略到战术
本文将用通俗易懂的语言,带你从战略(宏观)和战术(微观)两个层次掌握大模型提示词的常见技巧,真正做到理论和实践相结合,占领 AI 运用的先机。
|
存储
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
1313 0
Qt更新组件出现(“要继续此操作,至少需要一个有效且已启用的储存库”)
|
缓存 算法 Linux
深入理解操作系统的内存管理机制
【6月更文挑战第23天】内存管理是操作系统中一个至关重要的功能,它直接影响到系统性能和资源利用效率。本文旨在深入探讨现代操作系统中内存管理的核心概念、关键技术以及面临的挑战。通过分析内存管理的基本原理、内存分配策略、虚拟内存技术、缓存管理和内存安全等方面,揭示内存管理在提升操作系统稳定性、安全性与高效性方面的作用。文章将结合具体操作系统实例,如Windows、Linux等,阐述不同内存管理技术的实现细节和优化策略,为读者提供对操作系统内存管理机制全面而深刻的认识。
396 3
|
人工智能 前端开发 API
基于Web Speech API给AI语言模型加上语音功能,距离MOSS又近了一步
基于Web Speech API给AI语言模型加上语音功能,距离MOSS又近了一步
521 0
|
Web App开发 移动开发 Ubuntu
HTML5 Web Speech API,让网站更有趣
Web API 变得越来越丰富,其中一个值得注意的是Web Speech API。传统的网站只能“说”,这个API的出现,让网站能“倾听”用户。这个功能已经开放了一系列的用法,非常棒。
925 0
HTML5 Web Speech API,让网站更有趣