OpenSSL使用及域名签名

一、OpenSSL使用

1
2
3
4
5
6
7
openssl req -in server.csr -noout -subject # 查看csr信息 比如 subject=/C=CN/ST=Guangdong/L=Guangzhou/O=LKS/OU=IT Dept./CN=*.mianfeibang.cn
openssl req -new -newkey rsa:2048 -sha256 -nodes -out domain.cc.csr -keyout domain.cc.key -subj "/C=CN/ST=GuangZhou/L=GuangZhou/O=domain Inc./OU=Web Security/CN=domain.cc/CN=*.domain.cc"
openssl req -new -sha256 -key domain.key -subj "/" \
-reqexts SAN -config <(cat /etc/ssl/openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS:foo.com,DNS:www.foo.com"))

openssl配置

各系统openssl默认配置地址:

  • Debian: /etc/ssl/openssl.cnf
  • RHEL and CentOS: /etc/pki/tls/openssl.cnf
  • Mac OSX: /System/Library/OpenSSL/openssl.cnf

二、SSL证书说明

2.1 SSL证书概念和分类

CA,Catificate Authority,它的作用就是提供证书(即服务器证书,由域名、公司信息、序列号和签名信息组成)加强服务端和客户端之间信息交互的安全性,以及证书运维相关服务。任何个体/组织都可以扮演 CA 的角色,只不过难以得到客户端的信任,能够受浏览器默认信任的 CA 大厂商有很多,其中 TOP5 是 Symantec、Comodo、Godaddy、GolbalSign 和 Digicert。

SSL证书用途

  1. 保证服务器和客户端的真实性,杜绝中间人攻击和钓鱼网站
  2. 保护用户数据,通常是客户端的数据到服务器的传输是经过加密传输的,第三方无法监听。

SSL证书认证类别

alt

  • DV(Domain Validation),面向个体用户,安全体系相对较弱,验证方式就是向 whois 信息中的邮箱发送邮件,按照邮件内容进行验证即可通过;
  • OV(Organization Validation),面向企业用户,证书在 DV 证书验证的基础上,还需要公司的授权,CA 通过拨打信息库中公司的电话来确认;
  • EV(Extended Validation),打开 Github 的网页,你会看到 URL 地址栏展示了注册公司的信息,这会让用户产生更大的信任,这类证书的申请除了以上两个确认外,还需要公司提供金融机构的开户许可证,要求十分严格。

SSL提供商

国内免费SSL证书CA提供商:Wosign.com(已经废弃)
国外免费SSL证书CA提供商:StartSSL.com , letsencrypt.org(免费3个月,18年开始支持泛域名) , Cloudflare.com

在线CSR生产工具

三、证书配置

1
2
3
4
5
6
7
8
9
openssl x509 -inform PEM -in yourdomain.crt > public.pem
openssl rsa -in yourdomain.key -text > private.pem
openssl rsa -in yourdomain.key -out yourdomain.key.pem
openssl req -newkey rsa:2048 -nodes -keyout local.key -x509 -days 365 -out certificate.pem # 生成 专用密钥和公用证书
openssl x509 -text -noout -in certificate.pem # 检查已创建的证书
openssl pkcs12 -inkey local.key -in certificate.pem -export -out certificate.p12 # 将密钥和证书组合在 PKCS#12 (P12) 捆绑软件中
openssl pkcs12 -in certificate.p12 -noout -info # 验证您的 P12 文件

nginx配置:

1
2
3
4
5
6
7
8
9
10
11
12
service {
listen 443 ssl;
server_name 7daka.local;
ssl_certificate /www/ssl/local/certificate.pem;
ssl_certificate_key /www/ssl/local/local.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
... ...
}

参考