生成自签名的证书
2014-01-20 09:09
120 查看
生成自签名的证书
1. 生成自签名的证书
通常要配置 https 的服务器,都需要一个由正式的 CA 机构认证的 X509 证书。当客户端连接 https 服务器时,会通过 CA 的共钥来检查这个证书的正确性。但要获得 CA 的证书是一件很麻烦的事情,而且还要花费一定的费用。因此通常一些小的机构会是使用自签名的证书。也就是自己做 CA,给自己的服务器证书签名。
这个过程有两个主要的步骤,首先是生成自己的 CA 证书,然后再生成各个服务器的证书并为它们签名。 我是用 OpenSSL 来生成自签名证书的。
第一步是制作 CA 的证书:
openssl genrsa -des3 -out my-ca.key 2048
openssl req -new -x509 -days 3650 -key my-ca.key -out my-ca.crt
这会生成 my-ca.key 和 my-ca.crt 文件,前者存放着使用 my-ca.crt 制作签名时必须的密钥,应当妥善保管。而后者是可以公开的。上面的命令为 my-ca.key 设定的有效期为 10 年。
用命令
openssl x509 -in my-ca.crt -text -noout
可以查看 my-ca.crt 文件的内容。
有了 CA 证书之后,就可以为自己的服务器生成证书了:
openssl genrsa -des3 -out mars-server.key 1024
openssl req -new -key mars-server.key -out mars-server.csr
openssl x509 -req -in mars-server.csr -out mars-server.crt -sha1 -CA my-ca.crt -CAkey my-ca.key -CAcreateserial -days 3650
前两个命令会生成 key、csr 文件,最后一个命令则通过 my-ca.crt 为 mars-server.csr 制作了 x509 的签名证书。
需要注意的是,在执行上述第二个命令时,Common Name 选项应当输入的是服务器的域名,否则在用户通过 https 协议访问时每次都会有额外的提示信息。
用命令
openssl x509 -in mars-server.crt -text -noout
可以查看 mars-server.crt 文件的内容。
2. 配置 Apache 服务器
首先,创建 /etc/apache2/ssl 目录,将刚刚制作的 my-ca.crt、mars-server.key 和 mars-server.crt 文件拷贝到这个目录中。
接着执行命令
a2emod ssl
激活 Apache 的 SSL 模块,然后在 /etc/apache2/sites-enable/ 中添加虚拟主机,这个过程与添加普通的虚拟主机类似,不同点在于该主机的端口应为 443。配置如下:
NameVirtualHost *:443
<VirtualHost *:443>
ServerName localhost
DocumentRoot /var/www
SSLEngine On
SSLCipherSuite HIGH:MEDIUM
SSLProtocol all -SSLv2
SSLCertificateFile /etc/apache2/ssl/mars-server.crt
SSLCertificateKeyFile /etc/apache2/ssl/mars-server.key
SSLCACertificateFile /etc/apache2/ssl/my-ca.crt
<Directory /var/www>
Order deny,allow
Allow from localhost
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www
<Directory /var/www> Order deny,allow
Allow from localhost
</Directory>
</VirtualHost>
以上配置保证了用户在访问 443 和 80 端口时可以看到相同的内容,而仅仅是使用的协议不同。修改好配置后,便可以重启 Apache 服务器,这时需要输入 mars-server.key 的密码。用浏览器访问
https://localhost/ 这时应当看到一个弹出对话框,让你确认是否信任该站点的证书,选择信任后,便可以查看该站点的内容了。
由于大多数 Apache 服务器都是在服务器启动时自动启动,为了避免在启动 Apache 时输入密码,可以用以下命令生成不加密的 mars-server.key 文件:
openssl rsa -in mars-server.key -out mars-server.key.insecure
用新生成的 mars-server.key.insecure 代替原有的 key 文件即可。
1. 生成自签名的证书
通常要配置 https 的服务器,都需要一个由正式的 CA 机构认证的 X509 证书。当客户端连接 https 服务器时,会通过 CA 的共钥来检查这个证书的正确性。但要获得 CA 的证书是一件很麻烦的事情,而且还要花费一定的费用。因此通常一些小的机构会是使用自签名的证书。也就是自己做 CA,给自己的服务器证书签名。
这个过程有两个主要的步骤,首先是生成自己的 CA 证书,然后再生成各个服务器的证书并为它们签名。 我是用 OpenSSL 来生成自签名证书的。
第一步是制作 CA 的证书:
openssl genrsa -des3 -out my-ca.key 2048
openssl req -new -x509 -days 3650 -key my-ca.key -out my-ca.crt
这会生成 my-ca.key 和 my-ca.crt 文件,前者存放着使用 my-ca.crt 制作签名时必须的密钥,应当妥善保管。而后者是可以公开的。上面的命令为 my-ca.key 设定的有效期为 10 年。
用命令
openssl x509 -in my-ca.crt -text -noout
可以查看 my-ca.crt 文件的内容。
有了 CA 证书之后,就可以为自己的服务器生成证书了:
openssl genrsa -des3 -out mars-server.key 1024
openssl req -new -key mars-server.key -out mars-server.csr
openssl x509 -req -in mars-server.csr -out mars-server.crt -sha1 -CA my-ca.crt -CAkey my-ca.key -CAcreateserial -days 3650
前两个命令会生成 key、csr 文件,最后一个命令则通过 my-ca.crt 为 mars-server.csr 制作了 x509 的签名证书。
需要注意的是,在执行上述第二个命令时,Common Name 选项应当输入的是服务器的域名,否则在用户通过 https 协议访问时每次都会有额外的提示信息。
用命令
openssl x509 -in mars-server.crt -text -noout
可以查看 mars-server.crt 文件的内容。
2. 配置 Apache 服务器
首先,创建 /etc/apache2/ssl 目录,将刚刚制作的 my-ca.crt、mars-server.key 和 mars-server.crt 文件拷贝到这个目录中。
接着执行命令
a2emod ssl
激活 Apache 的 SSL 模块,然后在 /etc/apache2/sites-enable/ 中添加虚拟主机,这个过程与添加普通的虚拟主机类似,不同点在于该主机的端口应为 443。配置如下:
NameVirtualHost *:443
<VirtualHost *:443>
ServerName localhost
DocumentRoot /var/www
SSLEngine On
SSLCipherSuite HIGH:MEDIUM
SSLProtocol all -SSLv2
SSLCertificateFile /etc/apache2/ssl/mars-server.crt
SSLCertificateKeyFile /etc/apache2/ssl/mars-server.key
SSLCACertificateFile /etc/apache2/ssl/my-ca.crt
<Directory /var/www>
Order deny,allow
Allow from localhost
</Directory>
</VirtualHost>
<VirtualHost *:80>
ServerName localhost
DocumentRoot /var/www
<Directory /var/www> Order deny,allow
Allow from localhost
</Directory>
</VirtualHost>
以上配置保证了用户在访问 443 和 80 端口时可以看到相同的内容,而仅仅是使用的协议不同。修改好配置后,便可以重启 Apache 服务器,这时需要输入 mars-server.key 的密码。用浏览器访问
https://localhost/ 这时应当看到一个弹出对话框,让你确认是否信任该站点的证书,选择信任后,便可以查看该站点的内容了。
由于大多数 Apache 服务器都是在服务器启动时自动启动,为了避免在启动 Apache 时输入密码,可以用以下命令生成不加密的 mars-server.key 文件:
openssl rsa -in mars-server.key -out mars-server.key.insecure
用新生成的 mars-server.key.insecure 代替原有的 key 文件即可。
相关文章推荐
- Windows下安装OpenSSL+用openssl命令制作生成证书和自签名
- AndroidStudio生成签名证书SHA1值
- 如何用 openssl 生成RSA双密匙;签名证书;加密文件邮件
- 使用JDK生成android-apk证书,以及给未签名的apk签名
- Java SSL 自签名证书生成
- 用openssl生成SSL使用的私钥和证书,并自己做CA签名
- windows下使用makecert命令生成自签名证书
- 基于自签名的X.509数字证书生成及验证
- 生成自签名ca 证书 使nginx 支持https
- 关于Android签名证书的生成过程
- Mac下 Android studio创建签名证书,打包生成APK,.jks文件添加到build.gradle中
- Nginx 生成证书签名请求文件
- 如何用 openssl 生成RSA双密匙;签名证书;加密文件邮件
- java数字签名(签名生成,用证书验证签名)
- OPENSSL、KEYTOOL生成服务器与客户端证二级证书签名
- 生成签名证书keystore
- cmd命令生成android签名证书
- java数字签名(签名生成,用证书验证签名)
- 基于自签名的X.509数字证书生成及验证
- 使用keytool工具生成自签名证书