自做CA自签发SSL证书 https

来源:互联网 发布:小意思tpo for mac 编辑:程序博客网 时间:2024/04/30 12:37

SSL

Created Tuesday 16 October 2012

自做CA自签发SSL证书



http://www.crsr.net/Notes/Apache-HTTPS-virtual-host.html
http://wiki.cacert.org/VhostTaskForce


首先自建CA证书

对于只是测试用途或者应急的话,完全可以自己给自己签发证书

  1. 为你的CA创建一个RSA私钥(三DES加密并且是PEM格式):
$ openssl genrsa -des3 -out ca.key 1024
备份并且记住你输入的访问密码。通过以下的命令可以查看私钥的详细信息:
$ openssl rsa -noout -text -in ca.key
你也可以创建一个非加密的PEM格式的私钥:
$ openssl rsa -in ca.key -out ca.nopass.key
  1. 创建一个自签名的证书文件(X.509 结构,输出为PEM格式):
$ openssl req -new -x509 -days 365 -key ca.key -out ca.crt
通过以下的命令查询:
$ openssl x509 -noout -text -in ca.crt

然后自建server证书


生成服务器私钥: 
[root@win ssl.crt]# openssl genrsa -des3 -out server.key 1024

生成服务器证书请求

[root@win ssl.crt]# openssl req -new -key server.key -out server.csr

给server.csr 签证
[root@h4-vm3 ssl]# ./sign.sh server.csr 
你也可以创建一个非加密的PEM格式的私钥:
$ openssl rsa -in server.key -out server.nopass.key 

openssl x509 -req -days 365 -in t.csr -CA ca.crt -CAkey ca.key -set_serial 000009 -out t.crt -extfile x.cnf -extensions v3_ca


最后自建client证书


生成客户私钥: 
[root@win ssl.crt]# openssl genrsa -des3 -out client.key 1024
请求 
[root@win ssl.crt]# openssl req -new -key client.key -out client.csr
给client.csr 签证
[root@h4-vm3 ssl]# ./sign.sh client.csr 
把证书格式转换成pkcs12格式 
[root@win ssl.crt]# openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx


配置


将ca.crt 和 client.pfx 复制到 你的电脑上, 导入到浏览器的证书里面
client.pfx 导入到 个人证书
ca.crt 导入到 受信任的跟证书颁发机构里面


对于nginx


需要将server.crt 和 ca.crt 合并成一个文件
cat server.crt ca.crt > server.bundle.crt

然后在nginx 配置文件中添加配置

ssl on;


ssl_certificate /etc/pki/tls/certs/server.bundle.crt;
ssl_certificate_key /etc/pki/tls/private/server.nopass.key;


ssl_session_timeout 5m;


ssl_protocols SSLv2 SSLv3 TLSv1;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;

对于httpd


#SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
#指定服务器证书key位置
SSLCertificateKeyFile /usr/local/apache/conf/ssl.crt/server.key
#证书目录
SSLCACertificatePath /usr/local/apache/conf/ssl.crt
#根证书位置
SSLCACertificateFile /usr/local/apache/conf/ssl.crt/cacert.pem
#开启客户端SSL请求
SSLVerifyClient require
SSLVerifyDepth 1


附加sign.sh


[root@h4-vm3 ssl]# cat sign.sh 
#!/bin/sh
##
## sign.sh -- Sign a SSL Certificate Request (CSR)
## Copyright (c) 1998-1999 Ralf S. Engelschall, All Rights Reserved. 
##

# argument line handling
CSR=$1
if [ $# -ne 1 ]; then

echo "Usage: sign.sign <whatever>.csr"; exit 1
fi
if [ ! -f $CSR ]; then
echo "CSR not found: $CSR"; exit 1
fi
case $CSR in
*.csr ) CERT="`echo $CSR | sed -e 's/.csr/.crt/'`" ;;
*) CERT="$CSR.crt" ;;
esac

# make sure environment exists
if [ ! -d ca.db.certs ]; then

mkdir ca.db.certs
fi
if [ ! -f ca.db.serial ]; then
date|md5sum |awk '{print $1;}' >ca.db.serial
fi
if [ ! -f ca.db.index ]; then
cp /dev/null ca.db.index
fi

# create an own SSLeay config
cat >ca.config <<EOT
[ ca ]
default_ca = CA_own
[ CA_own ]
dir = /etc/ssl
certs = /etc/ssl/
new_certs_dir = /etc/ssl/ca.db.certs
database = /etc/ssl/ca.db.index
serial = /etc/ssl/ca.db.serial
RANDFILE = /etc/ssl/ca.db.rand
certificate = /etc/ssl/ca.crt
private_key = /etc/ssl/ca.key
default_days = 365
default_crl_days = 30
default_md = sha1
preserve = no
policy = policy_anything
[ policy_anything ]
countryName = optional
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
EOT

# sign the certificate
echo "CA signing: $CSR -> $CERT:"
openssl ca -config ca.config -out $CERT -infiles $CSR
echo "CA verifying: $CERT <-> CA cert"
openssl verify -CAfile /etc/ssl//ca.crt $CERT

# cleanup after SSLeay 
rm -f ca.config
rm -f ca.db.serial.old
rm -f ca.db.index.old
rm -rf ca.db*

# die gracefully
exit 0     

0 0
原创粉丝点击