开发者社区> sy9876> 正文

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

简介: 证书类别 - 根证书 生成服务器证书,客户端证书的基础。自签名。 - 服务器证书 由根证书签发。
+关注继续查看

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

要注意,
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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
【笔记】API参考—SSL加密—DescribeDBInstanceSSL
调用DescribeDBInstanceSSL接口查看目标实例的SSL配置信息。
24 0
【笔记】API参考—SSL加密—UpdateDBInstanceSSL
调用UpdateDBInstanceSSL接口更新SSL配置信息。
17 0
SSL证书问题合集
SSL证书问题合集
1961 0
2020阿里云免费SSL证书申请方法流程(图文教程)
阿里云免费SSL证书是Symantec品牌的,新手站长网分享阿里云SSL证书免费申请方法
20141 0
ssl证书内容如何使用
  SSL证书内容如何使用?由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装数字证书或服务器证书就可以激活功能了。SSL证书主要是服务于https的,部署证书后,网站链接就由http开头变为https。
1155 0
最新阿里云申请免费SSL证书实现网站HTTPS化(图文教程一)
发现很多使用阿里云的小伙伴找不到申请免费SSL证书的位置了,今天就结合自己申请Symantec证书的精力为大家用图文教程演示一下如何在阿里云申请免费SSL证书吧。
172692 0
+关注
sy9876
热爱技术,主要从事javaWeb应用开发,擅长linux环境下的研发与运维。正在学习docker与IoT相关技术。
文章
问答
视频
文章排行榜
最热
最新
相关电子书
更多
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载
冬季实战营第三期:MySQL数据库进阶实战
立即下载