摘要:一般http中存在请求信息明文传输,容易被窃听截取;数据的完整性未校验,容易被篡改;没有验证对方身份,存在冒充危险。面对这些问题,怎么破? 一、为什么要用https
一般http中存在如下问题:请求信息明文传输,容易被窃听截取;数据的完整性未校验,容易被篡改;没有验证对方身份,存在冒充危险。
HTTPS又有哪些优势?1、使用HTTPS可认证用户和服务器,确保数据发送到正确的客户机和服务器。
2、HTTPS是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,要比http协议安全,可防止数据在传输过程中不被窃取、改变,确保数据的完整性。
3、HTTPS是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
二、https中的证书是什么CA:证书授权中心( certificate authority)类似于国家出入境管理处一样,给别人颁发护照;也类似于国家工商管理局一样,给公司企业颁发营业执照。它有两大主要性质:
CA本身是受信任的,国际认可的;
给他受信任的申请对象颁发证书。 和办理护照一样,要确定你的合法身份,你不能是犯罪分子或造反派。当然,你需要被收保护费,同时,CA可以随时吊销你的证书。
CA 的证书 ca.crt 和 SSL Server的证书 server.crt 是什么关系呢?
SSL Server 自己生成一个 私钥/公钥对,server.key/server.pub 。server.pub 生成一个请求文件 server.req。 请求文件中包含有 server 的一些信息,如域名/申请者/公钥等。
server 将请求文件 server.req 递交给 CA,CA验明正身后,将用 ca.key和请求文件加密生成 server.crt由于 ca.key 和 ca.crt 是一对, 于是 ca.crt 可以解密 server.crt。
在实际应用中:如果 SSL Client 想要校验 SSL server.那么 SSL server 必须要将他的证书 server.crt 传给 client.然后 client 用 ca.crt 去校验 server.crt 的合法性。如果是一个钓鱼网站,那么CA是不会给他颁发合法server.crt证书的,这样client 用ca.crt去校验,就会失败。
三、生成证书与密钥shell脚本
#!/bin/bash PROJECT_NAME="https Project" # Generate the openssl configuration files. cat > ca_cert.conf << EOF [ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] O = $PROJECT_NAME Certificate Authority EOF cat > server_cert.conf << EOF [ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] O = $PROJECT_NAME CN = EOF cat > client_cert.conf << EOF [ req ] distinguished_name = req_distinguished_name prompt = no [ req_distinguished_name ] O = $PROJECT_NAME Device Certificate CN = EOF mkdir ca mkdir server mkdir client # 生成私钥 openssl genrsa -out ca.key 1024 openssl genrsa -out server.key 1024 openssl genrsa -out client.key 1024 # 根据私钥创建证书请求文件,需要输入一些证书的元信息:邮箱、域名等 openssl req -out ca.req -key ca.key -new -config ./ca_cert.conf openssl req -out server.req -key server.key -new -config ./server_cert.conf openssl req -out client.req -key client.key -new -config ./client_cert.conf # 结合私钥和请求文件,创建自签署证书 openssl x509 -req -in ca.req -out ca.crt -sha1 -days 5000 -signkey ca.key openssl x509 -req -in server.req -out server.crt -sha1 -CAcreateserial -days 5000 -CA ca.crt -CAkey ca.key openssl x509 -req -in client.req -out client.crt -sha1 -CAcreateserial -days 5000 -CA ca.crt -CAkey ca.key mv ca.crt ca.key ca/ mv server.crt server.key server/ mv client.crt client.key client/ rm *.conf rm *.req rm *.srl