天天看點

生成自簽名的證書

生成自簽名的證書

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 檔案即可。

轉載于:https://blog.51cto.com/chenshengang/1353008