Lab1: 自建HTTPs

1. 安装openssl

确定openssl版本:

 $openssl version

若未安装:

 $sudo apt-get install openssl

2. 创建初始工作环境

目录准备:

cd && mkdir -p myCA/signedcerts && mkdir myCA/private && cd myCA

创建并进入myCA,同时生成两个子目录 signedcerts和private
myCA用于存放CA根证书,证书数据库,以及后续服务器生成的证书,密钥以及请求
signedcerts:保存签名证书的copy
private: 包含私钥

3. 在myCA中配置参数文件:

echo '01'>serial && touch index.txt


然后创建caconfig.cnf文件:

vi ~/myCA/caconfig.cnf

内容如下:

原参考文档中配置文件改正的地方已标注。

# My sample caconfig.cnf file.
#
# Default configuration to use  when one
# is not provided on the command line.
#
[ ca ]
default_ca      = local_ca
#
#
# Default location  of  directories  and
# files needed to generate certificates.
#
[ local_ca ]
dir             = /home/myCA #注意自己的文件地址
certificate     = $dir/cacert.pem
database        = $dir/index.txt
new_certs_dir   = $dir/signedcerts
private_key     = $dir/private/cakey.pem
serial          = $dir/serial
#
#
# Default   expiration   and  encryption
# policies for certificates.
#
default_crl_days        = 365
default_days            = 1825
default_md              = md5
#
policy          = local_ca_policy
x509_extensions = local_ca_extensions
#
#
# Default policy to use  when generating
# server   certificates.  The  following
# fields  must  be defined in the server
# certificate.
#
[ local_ca_policy ]
commonName              = supplied
stateOrProvinceName     = supplied
countryName             = supplied
emailAddress            = supplied
organizationName        = supplied
organizationalUnitName  = supplied
#
#
# x509 extensions to use when generating
# server certificates.
#
[ local_ca_extensions ]
subjectAltName          = DNS:alt.tradeshowhell.com
basicConstraints        = CA:false
nsCertType              = server
#
#
# The default root certificate
# generation policy.
#
[ req ]
default_bits    = 2048
default_keyfile = /home/myCA/private/cakey.pem 注意自己的文件地址
default_md      = md5
#
prompt                  = no
distinguished_name      = root_ca_distinguished_name
x509_extensions         = root_ca_extensions
#
#
# Root  Certificate  Authority   distinguished
# name.  Change these fields to match
# your local environment!
#
[ root_ca_distinguished_name ]
commonName              = MyOwn Root Certificate Authority
stateOrProvinceName     = JS
countryName             = CH
emailAddress            = root@tradeshowhell.com
organizationName        = Trade Show Hell
#
[ root_ca_extensions ]
basicConstraints        = CA:true

注:保存并退出编译模式按Esc键后 输入:wq(:也是需要输入的)

4. 生成CA 根证书和密钥。

export OPENSSL_CONF=~/myCA/caconfig.cnf

该命令用于给环境变量OPENSSL_CONF赋值为caconfig.cnf。

然后,生成CA根证书和密钥

openssl req -x509 -newkey rsa:2048 -out cacert.pem -outform PEM -days 1825

可能会出现一下问题:

这是因为有的版本不会自动创建cecert.pem和cakey.pem文件

需要创建文件

创建cecert.pem文件

touch cacert.pem # 文件举例

设置密钥

openssl genrsa -out cakey.pem 2048

进入/myCA/private

cd ./private/

再创建cakey.pem文件


 touch cakey.pem # 文件举例

设置密钥

openssl genrsa -aes256 -out cakey.pem 2048

此步骤需要设置密码

返回上一个目录:

cd ..

重复4步骤 出现以下需要设置密码页面

之后设置密码,不要忘记。


以上步骤生成了CA自签名根证书,和RSA公/私密钥对。证书的格式是PEM,有效期是1825天。
/myCA/cacert.pem: CA根证书
/myCA/private/cakey.pem:CA私钥

5. 创建服务器公私钥,并让CA签名,生成服务器证书。
生成服务器配置文件~/myCA/exampleserver.cnf,例子如下:

#
# server.cnf
#

[ req ]
prompt                  = no
distinguished_name      = server_distinguished_name

[ server_distinguished_name ]
commonName              = localhost         # 服务器域名,由于在本地测试,设为 localhost 即可
stateOrProvinceName     = JS                # 服务器所在省份
countryName             = CN                # 服务器所在国家(仅限2字符)
emailAddress            = example@qq.com    # 邮箱
organizationName        = USTC              # 组织名
organizationalUnitName  = SE                # 单位名

注:保存并退出编译模式按Esc键后 输入:wq(:也是需要输入的)清空内容为:%d 回车执行

配置文件准备好之后,使用如下命令生成服务器证书:

export OPENSSL_CONF=~/myCA/exampleserver.cnf

该命令设置环境变量OPENSSL_CONF,使得openssl更换配置文件。
然后生成证书和密钥:

openssl req -newkey rsa:1024 -keyout tempkey.pem -keyform PEM -out tempreq.pem -outform PEM

同样的,需要输入密码短语。

然后,需要将临时私钥转换为unencrypted key。命令如下:

openssl rsa < tempkey.pem > server_key.pem

需要输入密码短语。
如果希望将key保持为加密状态,直接改名,

mv tempkey.pem server_key.pem

现在,需要使用CA key对服务器证书签名:

export OPENSSL_CONF=~/myCA/caconfig.cnf
openssl ca -in tempreq.pem -out server_crt.pem

出现该页面

删除临时证书和密码文件。

rm -f tempkey.pem && rm -f tempreq.pem

现在,自签名的服务器证书和密钥对便产生了:
1. server_crt.pem : 服务器证书文件
2. server_key.pem : 服务器密钥文件

二,

以 apache 为例来配置 https 服务,首先安装 apache:

sudo apt install apache2

apache 默认是 http 访问的,我们需要配置它的 https 服务并启用,首先 cd 到 apache 的可用站点目录:

cd /etc/apache2/sites-available/

其中有一个默认的 ssl 站点 default-ssl.conf,我们不用新建站点,修改它里面的 ssl 配置并启用即可,修改这个文件需要 sudo 权限

sudo vi default-ssl.conf

打开后找到其中的证书和私钥设置,修改为自己的服务器证书和私钥文件位置:

SSLCertificateFile  /home/{username}/https/server/server_crt.pem
SSLCertificateKeyFile /home/{username}/https/server/server_key.pem

然后重启 apache 服务器:

# 启用默认 ssl 站点和 ssl 模块
a2ensite default-ssl.conf
a2enmod ssl

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值