Apache如何配置SSL

来源:互联网 发布:php微信管理平台源码 编辑:程序博客网 时间:2024/06/11 09:52

openssl如此强大,以至于不得不学学他是怎么生成的公钥私钥和证书等等,顺便也学学配置原理,:-)

首先是介绍:

Overview:

传统的网络传输方法都是传输不加密的信息,这样的话,如果有人利用网络嗅探工具很容易获取传输的信息,secure socket layer被用来解决这个问题,SSL利用非对称加密,也叫public key cryptography(PKI),整个过程会产生2个key,一个公钥一个私钥,数据被公钥加密只能由对应的私钥解密,在这里还需要一个CA(验证中心),他的作用是验证公钥的合法性,要不然我们连和谁通信都不知道。


Step1:

生成私钥

openssl genrsa -des3 -out server.key 1024

期间会让你输入密钥。我们打开server.key可以看到


全是可识别的字符,原因是本来生成的1024私钥是不可识别的,这里用我们上面输入的密钥对他进行了3-DES加密,所以生成了可识别的字符串了。

Step2

生成证书签名请求CSR(certificate signed request)

首先解释一下什么叫证书签名请求,一个证书签名请求由一个可区分的名字、一个公钥和一个可选的属性集,再加上认证请求实体对上述信息的签名共同组成。一旦一个私钥生成了,证书签名请求就可以生成了,CSR被发送到Certificate Authority,也就是CA,CA对这个CSR进行身份验证。

在生成CSR的时候,你需要提供一些个人信息,命令如下:

openssl req -new -key server.key -out server.csr

效果如下:



server.csr生成了。我们用View File打开,可以看到一些信息。如下:


说明这是一个证书请求。点开详细信息查看,


Step 3 

移除私钥的加密密钥

上面我们生成的私钥,被我们用3-DES加密了,由于Apache在启动时每次都要求输入这个加密密钥,显然比较麻烦,我们移除这个密钥。移除之后私钥就是明文存储了,必须保证不能让别人获得。移除方法如下:

cp server.key server.key.orgopenssl rsa -in server.key.org -out server.key

如下图:


生成了server.key私钥文件。

Step 4

生成一个自签名文件

这里我们准备自签名,我们肯定不准备把签名发给CA签名,这种签名方法会在浏览器中报警告,生成一个365天的签名,命令如下:

openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

效果如下:


用server.key对server.csr签名,生成了server.crt文件。

用View File打开


证书已经弄好,然后就是部署了

Step 5

把生成的crt和key拷贝到对应位置

cp server.crt /usr/local/apache/conf/ssl.crtcp server.key /usr/local/apache/conf/ssl.key
Step 6

配置apache的default-ssl.conf文件

里面加入

SSLEngine onSSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crtSSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.keySetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdownCustomLog logs/ssl_request_log \   "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

apache的/etc/apache2/sites-available/000-default.conf下面增加443选项

<VirtualHost *:443>#ServerAdmin webmaster@localhostServerName 127.0.0.1:443DocumentRoot "/home/ss/workspace/www"LogLevel info ssl:warnErrorLog ${APACHE_LOG_DIR}/ssl_error.logCustomLog ${APACHE_LOG_DIR}/ssl_access.log combinedSSLEngine onSSLCertificateFile /etc/apache2/ssl.crtSSLCertificateKeyFile /etc/apache2/ssl.key<Proxy *>    Order deny,allow    Allow from all</Proxy><Location "/rustezemyss/web">ProxyPass  "http://127.0.0.1:8080/rustezemyss/web"</Location><Location "/rustezemyss/androidphone">ProxyPass  "ws://127.0.0.1:8080/rustezemyss/androidphone"ProxyPassReverse "ws://127.0.0.1:8080/rustezemyss/androidphone"</Location><Location "/webchat">ProxyPass  "ws://127.0.0.1:7272"ProxyPassReverse "ws://127.0.0.1:7272"</Location></VirtualHost>

Step 7

重启apache


成功!


0 0