linux下自建CA根证书

linux下自建CA 根证书 并给服务器颁发证书过程
###linux下自建CA 根证书 并给服务器颁发证书过程
建立一个根目录放置所有文件,这里选择/etc/ssl
建立一个private文件夹存放CA自己的私钥
建立certs文件夹存放为server颁发的证书的副本
创建一个index.txt文件作为证书的数据库文件
创建一个serial文件作为颁布证书的序号,先写入01
#mkdir private certs
#chmod 777 private
#touch index.txt
#echo ‘01’ > serial
创建一个CA配置文件caconfig.conf,名称任意,输入参考网站给的内容:
[ ca ]
default_ca= local_ca
[ local_ca ]
dir= /etc/ssl
certif icate = $dir/cacert.pem
database= $dir/index.txt
new_certs_dir = $dir/certs
private_key = $dir/private/cakey.pem
serial= $dir/serial
default_crl_days= 365
default_days= 1825
default_md= sha1
policy= local_ca_policy
x509_extensions = local_ca_extensions
copy_extensions = copy
[ local_ca_policy ]
commonName=optional
stateOrProvinceName = optional
countryName=optional
emailAddress=option al
organizationName=optional
organizationalUnitName = optional
[ local_ca_extensions ]
basicConstraints= CA:false
[ req ]
default_bits = 2048
default_keyfile = /etc/ssl /private/cakey.pem
default_md= sha1
prompt= no
distinguished_name= root_ca_distinguished_name
x509_extensions= root_ca_extensions
[ root_ca_distinguished_name ]
commonName= MyOwn Root Certificate Authority
stateOrProvinceName = NC
countryName= US
emailAddress= root@tradeshowhell.com
organizationName= Trade Show Hell
organizationalUnitName = IT Department
[ root_ca_extensions ]
basicConstraints= CA:true
[local_ca]下,dir为所有文件根目录,这里改为/etc/ssl
new_certs_dir存放为服务器颁发的证书的副本,这里改为/etc/ssl/certs certificate为CA根证书存放目录
database为证书数据库文件
private_key为CA的私钥文件
serial为证书序列号文件,每生成一个新证书会加1,这里不需更改。
将[local_ca_policy]的各项都改为optional,创建根证书时可不必输入这些信息
[ req ] 下的default_keyfile也必须修改,所指文件是生成CA私钥的位置和文件名,这里改为/etc/ssl/private/cakey.pem
配置文件可以通过环境变量export OPENSSL_CONF=/etc/ssl/caconfig.conf件传给openssl,这里用参数-config
####生成ca根证书:
openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 365 -config “caconfig.conf”
-newkey rsa:bits生成bits大小rsa新密钥
(-in输入文件-out输出文件-outform输出格式,DER或PEM)
提示给CA私钥设置密码,这个密码在生成服务器证书时会要求输入
会生成CA根证书cacert.pem和在private目录下的CA私钥cakey.pem
给server颁发证书需要一个请求文件,先生成一个证书请求文件和服务器的私钥,服务器的信息通过一个配置文件server.conf给出:
[ req ]
prompt = no
distinguished_name = server_distinguished_name
req_extensions = v3_req
[ server_distinguished_name ]
commonName = localhost
stateOrProvinceName = NC
countryName = US
emailAddress = root@tradeshowhell.com
organizationName = My Organization Name
organizationalUnitName = Subunit of My Large Organization
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names
[ alt_names ]
DNS.0 = localhost
DNS.1 = localhost
为了让访问的域名和证书中域名吻合,需修改:
[server_distinguished_name]下commonName
[alt_names]下DNS.0和DNS.1为localhost
执行命令前设置环境变量
export OPENSSL_CONF=/etc/ssl/server.conf
或用参数传递
openssl req -newkey rsa:1024 -keyout serverkey.pem -keyform PEM -out tempreq.pem -outform PEM -config “server.conf”
(-keyout file 发送密钥的文件-keyform 密钥文件格式)
这一步会提示输入密码,是给serverkey.pem文件设置的。
在设置完default-ssl后重启apache2会让输入这里设置的密码。
生成两个文件serverkey.pem服务器私钥,和证书请求文件tempreq.pem。
####利用tempreq.pem请求文件生成证书
openssl ca -in tempreq.pem -out server_crt.pem -config “caconfig.conf”
tempreq.pem文件为输入,server_crt.pem为输出的服务器证书,因为是请求CA生成证书,要使用CA的配置文件caconfig.conf而不是server的,如果之前把环境变量OPENSSL_CONF设为了server.conf,这里要改回来。会要求输入CA私钥的密码。
当前目录下会生成server_crt.pem服务器证书文件,查看certs文件夹里有了一个01.pem,是server_crt.pem的副本,serial内容变成02,index.txt里有了一则证书信息。
修改/etc/apache2/sites-available中default-ssl
文件的SSLCertificateFile以及SSLCertificateKeyFile
前者改为给服务器颁发的证书文件,server_crt.pem或01.pem都可
后者是服务器私钥serverkey.pem,不是CA的私钥cakey.pem。
SSLCertificateFile /etc/ssl/server_crt.pem
SSLCertificateKeyFile /etc/ssl/serverkey.pem
执行 #a2enmod ssl和#a2ensite default-ssl启动SSL模块
执行#service apache2 restart重启服务器,会让输入服务器私钥serverkey.pem的密码。
在firefox的Edit->Preferences->Advanced->Encryption->View Certificates->Authorities中import CA的根证书/etc/ssl/cacert.pem文件
在浏览器中输入https://localhost,前面会显示经过验证。
「你还是一个人吗」
「难道我回变成一条狗吗」
「`汪汪汪`」 -----------------