openssl实现私有CA,并配置基于openssl的https服务的配置,原理如下图

在CA服务器上实现私有CA步骤如下;

1、生成一对密钥

2.生成自签证书

基本的配置如下代码;

[root@CA CA]# pwd/etc/pki/CA[root@CA CA]# (umask 077;openssl genrsa -out private/cakey.pem 2048)[root@CA CA]# openssl req -new -x509 -key private/cakey.pem -out cacert.pemYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [CN]:State or Province Name (full name) [NEIMENGGU]:Locality Name (eg, city) [Huhhot]:Organization Name (eg, company) [EDU]:Organizational Unit Name (eg, section) [Tech]:Common Name (eg, your name or your server's hostname) []:ca.edu.cnEmail Address []:caadmin@edu.cn[root@CA CA]# touch index.txt[root@CA CA]# touch serial[root@CA CA]# echo 01 > serial [root@CA CA]# lscacert.pem  certs  crl  index.txt  newcerts  private  serial

webserver服务器上的证书生成步骤;

[root@www ~]# cd /etc/httpd/[root@www httpd]# mkdir ssl[root@www httpd]# cd ssl/[root@www ssl]# pwd/etc/httpd/ssl[root@www ssl]# (umask 077; openssl genrsa -out httpd.key 1024)Generating RSA private key, 1024 bit long modulus..........................++++++.......++++++e is 65537 (0x10001)[root@www ssl]# lltotal 4-rw-------. 1 root root 887 Aug  6 23:46 httpd.key

webserver生成证书签署请求;

[root@www ssl]# openssl req -new -key httpd.key -out httpd.csrYou are about to be asked to enter information that will be incorporatedinto your certificate request.What you are about to enter is what is called a Distinguished Name or a DN.There are quite a few fields but you can leave some blankFor some fields there will be a default value,If you enter '.', the field will be left blank.-----Country Name (2 letter code) [XX]:CNState or Province Name (full name) []:NEIMENGGULocality Name (eg, city) [Default City]:HuhhotOrganization Name (eg, company) [Default Company Ltd]:EDUOrganizational Unit Name (eg, section) []:TechCommon Name (eg, your name or your server's hostname) []:www.edu.cnEmail Address []:Please enter the following 'extra' attributesto be sent with your certificate requestA challenge password []:An optional company name []:

将申请证书发送打CA服务器上,让CA服务器来完成证书的签署

[root@CA CA]# scp root@192.168.0.107:/etc/httpd/ssl/httpd.csr ./certs/root@192.168.0.107's password: httpd.csr                                 100%  647     0.6KB/s   00:00    [root@CA CA]# ll ./certs/total 4-rw-r--r-- 1 root root 647 Aug  5 21:39 httpd.csr

CA服务器来完成证书的签署

[root@CA CA]# openssl ca -in ./certs/httpd.csr -out ./certs/httpd.crt -days 365Using configuration from /etc/pki/tls/openssl.cnfCheck that the request matches the signatureSignature okCertificate Details:        Serial Number: 1 (0x1)        Validity            Not Before: Aug  5 13:45:06 2016 GMT            Not After : Aug  5 13:45:06 2017 GMT        Subject:            countryName               = CN            stateOrProvinceName       = NEIMENGGU            organizationName          = EDU            organizationalUnitName    = Tech            commonName                = www.edu.cn        X509v3 extensions:            X509v3 Basic Constraints:                 CA:FALSE            Netscape Comment:                 OpenSSL Generated Certificate            X509v3 Subject Key Identifier:                 12:2C:ED:3F:F1:FA:54:FB:71:03:79:03:81:77:2D:A6:33:EF:8E:8F            X509v3 Authority Key Identifier:                 keyid:1B:1E:92:D1:DD:79:A6:68:19:91:5F:08:04:FF:7C:25:73:E4:BC:82Certificate is to be certified until Aug  5 13:45:06 2017 GMT (365 days)Sign the certificate? [y/n]:y1 out of 1 certificate requests certified, commit? [y/n]yWrite out database with 1 new entriesData Base Updated[root@CA CA]# ll ./certs/total 4-rw-r--r-- 1 root root   0 Aug  5 21:43 httpd.crt-rw-r--r-- 1 root root 647 Aug  5 21:39 httpd.csr

将证书文件发送给请求端;

[root@CA CA]# scp ./certs/httpd.crt root@192.168.0.107:/etc/httpd/ssl/root@192.168.0.107's password: httpd.crt                                 100% 3754     3.7KB/s   00:00

在webserver服务器上安装支持ssl的模块;

# yum install -y mod_ssl

配置ssl.conf配置文件,修改如下行;

[root@www ssl]# vim /etc/httpd/conf.d/ssl.conf 107 SSLCertificateFile /etc/httpd/ssl/httpd.crt114 SSLCertificateKeyFile /etc/httpd/ssl/httpd.key

启动apache服务

[root@www ssl]# service httpd start

在windows客户端通过如下方式安装信任CA证书颁发机构;

将CA服务器上的cakey.pem文件下载到windows客户端上,修改文件名后缀为crt(cakey.crt),双击此文件,安装信任该证书颁发机构,具体步骤;

安装证书-->下一步-->选择将证书放入下列存储-->浏览-->选择受信任的根证书颁发机构-->完成;

通过web页面访问,效果如下;

部署完成。