前言


    在互联网通信之中,安全还是比较重要的,从一开始的http协议发展到https协议,也是为了安全考虑,也就是有secure http,安全的http协议传输,两者使用的是相同的协议传输,不过https加了一个安全层,为tls/ssl,从而也就有了https。


    在linux上,主要使用openssl来实现,因为在安全传输的时候,只要建立ssl会话即可,从而实现安全的密钥交换,传输,数据加密,数据完整性等操作。


https的CA端的设置


    https的CA端,只要作用是为了实现自签证书,并且签署客户端的证书申请,具体使用的脚本如下所示:

#!/bin/bash


cd /etc/pki/CA

(umask 077;openssl genrsa -out private/cakey.pem 2048 &>/dev/null)

openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655 -subj "/C=CN/ST=Jiansu/L=Nanjin/O=KEL/OU=IT/CN=www.kel.com/emailAddress=kel@admin.com"

touch index.txt serial crlnumber

echo 01 > serial

    以上第一步生成自签证书的服务端,在设置umask的时候,主要是为了设置权限保证安全性;第二部是为了生成自签证书;第三步主要是创建相关的文件。

    第二步的参数中,C表示国家,CN表示中国,ST表示江苏省,L表示南京,O表示组织的名称,OU表示所在的部门,CN表示主机的名称,emailAddrss表示邮箱地址。

    执行完成之后,生成如下文件:

[root@mogilenode1 CA]# pwd

/etc/pki/CA

[root@mogilenode1 CA]# tree

.

├── cacert.pem (自签证书

├── certs

├── crl

├── crlnumber

├── index.txt

├── newcerts

├── private

│   └── cakey.pem (CA的私钥文件

└── serial


4 directories, 5 files


http客户端设置


    http客户端设置,主要是生成私钥文件和申请,给CA进行签署,生成私钥文件和申请如下所示:

#!/bin/bash


servername=www.kel.com

(umask 077;openssl genrsa -out httpd.key 1024 &>/dev/null)

openssl req -new -key httpd.key -out httpd.csr -subj "/C=CN/ST=Jiansu/L=Nanjin/O=KEL/OU=IT/CN=$servername/emailAddress=kel@admin.com"

    执行完成之后,生成如下文件:

[root@mogilenode1 ssl]# ls -l

total 12

-rw-r--r-- 1 root root 680 Sep 17 05:44 httpd.csr (证书申请

-rw------- 1 root root 887 Sep 17 05:44 httpd.key (证书密钥


    servername每次是可以修改的,也就是修改成对应的主机名称,邮箱地址也是可以修改的,其他的部分必须保持一致

签署申请


    将httpd.csr发送到CA,然后CA进行签署申请如下:

[root@mogilenode1 ssl]# openssl ca -in httpd.csr -outhttpd.crt -days 3655

Using configuration from /etc/pki/tls/openssl.cnf

Check that the request matches the signature

Signature ok

Certificate Details:

        Serial Number: 1 (0x1)

        Validity

            Not Before: Sep 17 09:47:00 2017 GMT

            Not After : Sep 20 09:47:00 2027 GMT

        Subject:

            countryName               = CN

            stateOrProvinceName       = Jiansu

            organizationName          = KEL

            organizationalUnitName    = IT

            commonName                = www.kel.com

            emailAddress              = kel@admin.com

        X509v3 extensions:

            X509v3 Basic Constraints: 

                CA:FALSE

            Netscape Comment: 

                OpenSSL Generated Certificate

            X509v3 Subject Key Identifier: 

                08:11:83:92:7A:0B:A7:4A:12:67:6C:56:CC:65:F9:E3:94:33:6E:99

            X509v3 Authority Key Identifier: 

                keyid:D4:DE:73:06:16:BD:9A:4D:00:06:69:05:CC:89:27:BC:30:FD:64:AC


Certificate is to be certified until Sep 20 09:47:00 2027 GMT (3655 days)

Sign the certificate? [y/n]:yes



1 out of 1 certificate requests certified, commit? [y/n]yes

Write out database with 1 new entries

Data Base Updated

httpd的配置


    在httpd中,需要首先启用ssl,并且编译的时候要编译了此模块,编译的选项使用的是--enable-ssl,检查如下:

[root@mogilenode1 bin]# ./httpd -l |grep mod_ssl (已经编译ssl

  mod_ssl.c

[root@mogilenode1 conf]# grep ssl httpd.conf (主配置文件中启用ssl

Include conf/extra/httpd-ssl.conf

[root@mogilenode1 extra]# grep httpd. httpd-ssl.conf  (指定httpd的密钥文件和httpd的证书文件

SSLCertificateFile "/usr/local/apache2/conf/ssl/httpd.crt"

SSLCertificateKeyFile "/usr/local/apache2/conf/ssl/httpd.key"

[root@mogilenode1 extra]# pwd(路径)

/usr/local/apache2/conf/extra

    然后重启即可:

[root@mogilenode1 extra]# /usr/local/apache2/bin/httpd -k restart

httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.249.236 for ServerName

[root@mogilenode1 extra]# netstat -ntlp|grep httpd (查看是否监听443端口

tcp        0      0 :::80                       :::*                        LISTEN      961/httpd           

tcp        0      0 :::443                      :::*                        LISTEN      961/httpd

测试


    进行测试如下:

[root@mogilenode1 CA]# cat /etc/hosts(设置主机解析

192.168.249.236 mail.kel.com

[root@mogilenode1 CA]# curl --cacert cacert.pem https://www.kel.com (使用证书进行https连接,否则无法连接

<html><body><h1>It works!</h1></body></html>

    

    在测试的时候,也可以将cacert.pem文件下载到windows,然后修改后缀为crt,然后安装导入证书,使用浏览器访问,注意也要进行主机解析设置,也就是设置hosts文件,必须使用指定的域名进行访问。

HTTPS设置_java


    可能还是不受信任的,主要和浏览器的安全设置有关。


    那么问题来了,为啥要使用CA呢?也就是为啥需要证书颁发机构呢?在使用https的时候,必须进行公钥交换,那么怎么来信任这个公钥是对应的主机发送过来的呢?从而需要使用第三方认证机构,也就是一套的pki,公钥基础设施,来进行保证公钥是对的,从而实现安全通信。