Linux下导入SSL证书(配置用于Apache)

来源:互联网 发布:兰新高铁 知乎 编辑:程序博客网 时间:2024/05/21 14:43

OpenSSL下载地址:(http://www.openssl.org/source/)(以最新版本openssl-1.0.1e.tar.gz为例)
一、安装/升级OpenSSL
首先确认是否已安装过openssl
[root@openssl-1.0.1e]#openssl version -a
如果已经安装过,则根据需要版本看是否需要升级,如果没有安装过,则使用全新安装方法进行安装。
1、全新安装
[root@localhost media]#wget http://www.openssl.org/source/openssl-1.0.1e.tar.gz
[root@localhost media]#tar -xzvf  openssl-1.0.1e.tar.gz
[root@localhost openssl-1.0.1e]#cd openssl-1.0.1e
[root@localhost openssl-1.0.1e]#./config -prefix=/usr/local/ssl              //指定安装路径。不指定时,默认路径也为/usr/local/ssl
[root@localhost openssl-1.0.1e]#make
[root@localhost openssl-1.0.1e]#make install
安装完后确认
[root@openssl-1.0.1e]#openssl version -a
2、升级安装时
如果已经安装了OpenSSL,但需要升级时,操作如下:
a,按照全新安装步骤执行安装
b,更新关联文件
[root@localhost openssl-1.0.1e]#mv /usr/bin/openssl  /usr/bin/openssl.OFF

[root@localhost openssl-1.0.1e]#mv /usr/include/openssl  /usr/include/openssl.OFF    //**根据安装方法不同,该文件夹的路径可能会不同,可能会是 /usr/lib64/openssl. **//

[root@localhost openssl-1.0.1e]#ln –s /usr/local/ssl/bin/openssl/usr/bin/openssl
[root@localhost openssl-1.0.1e]#ln –s/usr/local/ssl/include/openssl /usr/include/openssl
//**链接文件的路径[/usr/local/ssl]要和安装时指定的-prefix的路径是一致的。
c,配置库文件搜索路径
[root@localhost openssl-1.0.1e]#echo “/usr/local/ssl/lib” >>/etc/ld.so.conf             //** [/usr/local/ssl]要和安装时指定的-prefix的路径是一致的。
[root@localhost openssl-1.0.1e]#ldconfig –v         //**小写字母v
d,确认版本信息
[root@localhost openssl-1.0.1e]#opensslvision -a
确认出现的版本和安装日期和我们进行的最新信息相同


二、制作SSL证书
1、创建密钥文件存放位置
[root@localhost openssl-1.0.1e]#cd /usr/local/httpd-2.1.15/conf         //rpm安装的Apache时,路径为/etc/httpd/conf/
[root@localhost conf]#mkdir ssl.crt
[root@localhost conf]#cp /usr/local/openSSL/ssl/misc/CA.sh  ssl.crt/

2、制作根证书

a、[root@localhostssl.crt]#./CA.sh -newca

-------------------------------------------------------------

CAcertificate filename (or enter to create)
回车创建新文件,
MakingCA certificate ...
Generatinga 1024 bit RSA private key
....++++++
..++++++
writingnew private key to './demoCA/private/./cakey.pem'
EnterPEM pass phrase:
输入加密密码(ca.pem.password),确认密码后,填写证书信息:
CountryName (2 letter code) [AU]:CN
Stateor Province Name (full name) [Some-State]:XX
LocalityName (eg, city) []:XX
OrganizationName (eg, company) [Internet Widgits Pty Ltd]:XXX
OrganizationalUnit Name (eg, section) []:XX
CommonName (eg, YOUR name) []: XX
EmailAddress []:XX@XX
Pleaseenter the following 'extra' attributes
tobe sent with your certificate request
Achallenge password []:XXXX                 //可不输入
Anoptional company name []:XXX       //可不输入
Usingconfiguration from /usr/local/ssl/openssl.cnf
Enterpass phrase for ./demoCA/private/./cakey.pem:
输入刚才输入的PEM密码(ca.pem.password),一定要一致,否则会出错。
Checkthat the request matches the signature
Signatureok
CertificateDetails:
        Serial Number: 14351608714847615801(0xc72b28168be47b39)
        Validity
            Not Before: Apr 22 11:36:48 2013GMT
            Not After : Apr 21 11:36:48 2016GMT
        Subject:
            countryName               = CN
            stateOrProvinceName       = XX
            organizationName          = XX
            organizationalUnitName    = XX
            commonName                = XX
            emailAddress              = XX@XX
        X509v3 extensions:
            X509v3 Subject Key Identifier:
               93:CE:87:82:F5:A6:69:1B:77:D9:CF:9E:97:95:FD:51:1B:31:6E:E2
            X509v3 Authority Key Identifier:
               keyid:93:CE:87:82:F5:A6:69:1B:77:D9:CF:9E:97:95:FD:51:1B:31:6E:E2
            X509v3 Basic Constraints:
                CA:TRUE
Certificateis to be certified until Apr 21 11:36:48 2016 GMT (1095 days)
Writeout database with 1 new entries
DataBase Updated
---------------------------------------------------------
创建完成。
CommonName :这个名称可以随便取。
生成结果:
demoCA/private/cakey.pem 是CA证书的私钥文件,
demoCA/cacert.pem 是CA证书。

b、制作用于CA签名的CA的私钥和公钥文件
[root@localhostssl.crt]#openssl genrsa -des3 -out ca.key 1024
//要求为key文件输入密码(ca.key.password,随便输入,可以和输入的PEM密码不同)
[root@localhostssl.crt]#openssl req -new -x509 -days 18250-key ca.key -out ca.crt 
//要求输入密码以及证书信息。输入的密码要与使用的key文件的密码一致,否则会出错。

同时需要输入证书信息。以完成公钥生成。


3、制作服务器证书

a、生成服务器私钥(server.key)
[root@localhost ssl.crt]#openssl genrsa -des3 -out server.key 1024
输入加密密码(server.key.password),用128位rsa算法密钥server.key文件
该密码在部署服务器密钥时需要使用
b、生成服务器证书请求(server.csr)
[root@localhost ssl.crt]#openssl req -new -key server.key -out server.csr
这里要求输入的CommonName必须与通过浏览器访问您网站的 URL 完全相同,否则用户会发现您服务器证书的通用名与站点的名字不匹配,用户就会怀疑您的证书的真实性。可以使域名也可以使IP地址。
c、生成服务器公钥(证书)
[root@localhost ssl.crt]#openssl ca  -in server.csr -days 18250 -out server.crt -cert ca.crt -keyfile ca.key

d、查看和验证证书信息

[root@localhost ssl.crt]#openssl x509 -noout -text -in server.crt                    //查看证书信息
[root@localhost ssl.crt]#openssl verify -CAfile ca.crt server.crt                    //验证证书信息

一定要保证验证通过,没有报错或警告信息。否则可能会在使用时出错。


4、制作客户端证书

a、生成服务器私钥(client.key)
[root@localhost ssl.crt]#openssl genrsa -des3 -out client.key 1024
输入加密密码(client.key.password),用128位rsa算法密钥client.key文件
该密码在部署客户端密钥时需要使用。
b、生成服务器证书请求(client.csr)
[root@localhost conf]#openssl req -new -key client.key -out client.csr
Common Name 可以随便取。
c、生成服务器公钥(证书)
[root@localhost ssl.crt]#openssl ca  -in client.csr -days 18250 -out client.crt -cert ca.crt -keyfile ca.key
将证书转换成浏览器可识别的格式:
[root@conf]#openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.p12

需要输入Export密码,可以和Key文件密码不一样。该密码在客户端部署KEY文件时需要使用。
d、
[root@localhost ssl.crt]#openssl x509 -noout -text -in client.crt                    //查看证书信息
[root@localhost ssl.crt]#openssl verify -CAfile ca.crt client.crt                   //验证证书信息

一定要保证验证通过,没有报错或警告信息。否则可能会在使用时出错。

*******生成证书时,如果有无法更新数据库时,则清空demoCA/index.txt:

#vi index.txt
G
:1,.d

保存退出。


三、部署证书

如果使用双向认证,就会有三个私钥和三个证书。分别是 ca.key, ca.crt, server.key, server.crt, client.key, client.crt ,以及给浏览器的 client.pfx 。
如果使用有 CA 证书的单向认证,证书和私钥就是 ca.key, ca.crt, server.key, server.crt 。
如果使用无 CA 证书的单向认证,证书和私钥就是 server.key, server.crt 。

1、修改httpd.conf文件

**RPM安装的情况下,不需要修改httpd.conf文件,因为在httpd.conf文件中默认添加了 include conf.d/*.conf。而在rpm安装时,conf.d文件夹中已含有ssl.conf文件。所以只要修改ssl.conf文件就可以了。**

**RPM安装的Apahce时,可能一开始没有mod-ssl,需要安装。方法为:yum install mod_ssl 或者用rpm包安装,需要mod_ssl arp_util distcache httpd postgresql-libs等伊来关系。**

需要修改时可在httpd.conf文件中加上include conf.d/ssl.conf(用于ssl模块使用的conf文件的路径即可)。

2、修改ssl.conf文件

[root@localhost conf.d]#cp -p ssl.conf ssl.conf.bk

[root@localhost conf.d]#vi ssl.conf

---------------------------------------

Listen 443     //可以改成其他端口
SSLPassPhraseDialog  builtin       //每次重启Apache时需要输入密码
SSLSessionCache         shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout  300
SSLMutex default
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin

<VirtualHost _default_:443>
SSLEngine on
SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
SSLCertificateKeyFile /etc/httpd/conf/ssl.crt/server.key

SSLCACertificateFile /etc/httpd/conf/ssl.crt/ca.crt   //双向时使用
SSLVerifyClient require    //双向时使用,强制客户必须持有SSL证书请求
SSLVerifyDepth  10         //双向时使用
</VirtualHost>

---------------------------------------

可以按照如下方式重新导入KEY文件,则可以不用每次重启Apache都需要输入KEY文件密码

[root@localhost ssl.crt]#openssl rsa -in server.key -out server2.key
[root@localhost ssl.crt]#mv server.key server.key.originalkey
[root@localhost ssl.crt]#mv server2.key server.key

3、重启Apache

[root@localhost ssl.crt]#service httpd restart

如果端口号为非默认的443(假如为446),则可能会会出现如下错误:

Starting httpd: (13)Permission denied: make_sock: could not bind to address [::]:446
(13)Permission denied: make_sock: could not bind to address 0.0.0.0:446
no listening sockets available, shutting down
Unable to open logs
                                                           [FAILED]

则可以使用semanagement工具来添加Apache的侦听端口

[root@localhost ssl.crt]#semanage port -l|grep http
[root@localhost ssl.crt]#semanage port -a -t http_port_t -p tcp 446

再次重启Apache应该就可以使用了。

4、开启防火墙端口

[root@localhost conf]#cd /etc/sysconfig/
[root@localhost conf]#vi iptables
-------------------------------------
添加
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 446 -j ACCEPT
-------------------------------------
[root@localhost sysconfig]# /etc/init.d/iptables restart

配置完之后,如果客户端没有安装证书,则不能用446端口访问服务器了。

5、客户端安装证书

IE为例:
【工具】--》【internet选项】--》【内容】--》【证书】--》【受信任的根证书颁发机构】--》【导入】,导入ca.crt。
(双向认证时)【工具】--》【internet选项】--》【内容】--》【证书】--》【个人】--》【导入】,导入client.p12,需要输入该文件的密码
可使用https访问网站

*如果使用IE访问时有问题而用其他浏览器比如火狐,谷歌时没有问题,请对IE做以下设置:
【工具】--》【internet选项】--》【高级】--》安全
ssl和tls使用最低版本。比如SSL 勾选【使用SSL 2.0】,其他的ssl版本不勾选
tls勾选【使用TLS 1.0】,其他版本的tsl不勾选
*其他浏览器操作类似,有问题可以百度搜索。



原创粉丝点击