Hello World!
Toggle navigation
Home
开发
运维部署
旧博客搬家
About Me
aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
Archives
Tags
OpenSSL创建自签名证书
OpenSSL
2018-06-28 14:06:21
79
0
0
lion
OpenSSL
##准备 apt-get install openssl cd /etc/ssl/ ##建立 CA 目录结构 mkdir -p ./demoCA/{private,newcerts} touch ./demoCA/index.txt echo 01 > ./demoCA/serial ## 生成 CA 的 RSA 密钥对 openssl genrsa -des3 -out ./demoCA/private/cakey.pem 2048 ## 签发自签名根证书 openssl req -new -x509 -extensions v3_ca -days 3650 -key ./demoCA/private/cakey.pem -out ./demoCA/cacert.pem #cakey.pem为私钥,切不可泄漏 #cacert.pem为CA证书,可公开,需要安装到操作系统,这样操作系统就能信任你自己创建的用户证书了。 ## 生成用户的 RSA 密钥对 openssl genrsa -des3 -out ever2010.key ##如果是给网站用作https,产生一个解密的key,以免启动apache时需要输密码 openssl rsa -in ever2010.key -out ever2010.apache.key ## 生成用户证书请求 openssl req -new -days 365 -key ever2010.key -out ever2010.csr -config openssl.cnf #含san,可以指定多域名,openssl.cnf见后文 ## 使用 CA 签发用户证书 openssl ca -in ever2010.csr -out ever2010.crt -config openssl.cnf -extensions v3_req #with SAN ##创建用户证书p12文件 penssl pkcs12 -export -in ever2010.key -name "mycert" -certfile ever2010.crt -caname "EVER2010.COM" -out ever2010.cert.p12 ##windows导入CA cacert.pem重命名为ca.crt,复制到Windows,双击导入,选择存储到“受信任的根证书机构” 也可导入p12用户证书 ##IOS导入CA 将cacert.pem,发送到邮箱附件中,在IOS中用自带邮箱app接收打开附件导入。 ##安卓导入CA cacert.pem重命名为ca.crt,传入安卓SD卡中,点击设置--安全--安装证书,选择文件进行导入。 *导入CA后,用这个CA证书签名的所有用户证书就都被信任了* *创建用户证书时,如果用于网站,Common Name 参数需与网站域名一致* ##openssl.conf文件 [openssl.cnf](/api/file/getAttach?fileId=5b40379f3c9b99053d000035) 来源:https://github.com/openssl/openssl/blob/master/apps/openssl.cnf 修改内容: 修改匹配策略 默认匹配策略是:国家名,省份,组织名必须相同(match)。我们改为可选(optional),这样避免我们生成证书请求文件时(csr)去参考 CA 证书。 OPENSSL # For the CA policy [ policy_match ] countryName = match stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional 修改默认值 这是可选项,修改默认值,可以让你更快的颁发证书,一直回车就可以了: OPENSSL [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = CN countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) stateOrProvinceName_default = Shanghai localityName = Locality Name (eg, city) localityName_default = Shanghai 0.organizationName = Organization Name (eg, company) 0.organizationName_default = deepzz # we can do this but it is not needed normally :-) #1.organizationName = Second Organization Name (eg, company) #1.organizationName_default = World Wide Web Pty Ltd organizationalUnitName = Organizational Unit Name (eg, section) organizationalUnitName_default = deepzz 关键步骤 最关键的地方是修改 v3_req。添加成如下: OPENSSL [ v3_req ] # Extensions to add to a certificate request basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment subjectAltName = @alt_names [ alt_names ] DNS.1 = abc.com DNS.2 = *.abc.com DNS.3 = xyz.com IP.1 = 127.0.0.1 ##证书白话概念 ####密钥对: SSL算法产生的一对密钥,公钥可以公开,私钥必需保密;用公钥加密的数据,只有私钥能解,用私钥加密的数据,则只有公钥能解密。 ####数字证书: 证书包含公钥和创建者信息和数字签名信息,用来给别人加密数据发送给你,加密的数据,只有你的私钥能解密。 ####CA证书: 也叫根证书,用来给用户证书做数字签名。 一般操作系统会有一些内置的CA根证书,都是国际巨头们所拥有,所以购买https证书其实就是用他们的CA证书私钥签发用户证书给你。 所以,我们用自己创建的CA证书加入操作系统信任后,就可以自己给自己无限签发用户证书啦。 ####用户证书: 用来加密的证书,如加密文件、搭建https网站、加密邮件等。 例如别人访问你的https网址时,请求数据会通过你的证书里的公钥进行加密,发送到你的服务器,只有你服务器中的私钥可以解密,其它人中途截获无法破解。 所以传输用户名和密码的网站,一定要用https证书加密。 ####CA签名 防止别人伪造你的用户证书,所以使用CA私钥进行数字签名,通过公开的CA证书可以进行验证是否伪造。
Pre:
自动ping服务器脚本
Next:
Nginx反向代理
0
likes
79
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
目录