Linux
openssl
HTTPS
オレオレ証明書
Firewall

httpsの設定とオレオレ証明書(自己署名証明書)の作成

More than 1 year has passed since last update.

httpsの設定とOpenSSLでのオレオレ証明書(自己署名証明書)の作成手順。

環境:

CentOS7

Apatch2.4.6


必要なものをインストール

# yum install openssl

# yum install mod_ssl

OpenSSLとmod_sslをインストール。

既にインストールされている場合はスキップ


オレオレ証明書を作る


  1. 秘密鍵の作成


  2. 公開鍵 CSR(証明書署名要求)の作成 (追記参照)

  3. 証明書の作成
    の順に準備する。


秘密鍵を作る

まず/etc/httpd/conf へ移動して秘密鍵を作る。

# cd /etc/httpd/conf

# openssl genrsa -aes128 1024 > server.key

Generating RSA private key, 1024 bit long modulus
..................++++++
..........................................++++++
e is 65537 (0x10001)
Enter pass phrase:(パスワード)
Verifying - Enter pass phrase:(パスワード再入力)

ここではserver.keyという名前で、128 ビットの AES 方式で暗号化した 1024 ビットの秘密鍵を作成している。

Enter pass phraseでパスワードを入力が求められるので、任意のパスワードを入力&再入力する。


公開鍵 CSR(証明書署名要求)を作る

次に秘密鍵を使って、公開鍵 公開鍵を含むCSR(証明書署名要求)を作成。

# openssl req -new -key server.key > server.csr

Enter pass phrase for server.key:(パスワード)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:JP
State or Province Name (full name) [Some-State]:Tokyo
Locality Name (eg, city) []:Shinjuku
Organization Name (eg, company) [Internet Widgits Pty Ltd]:(スキップ)
Organizational Unit Name (eg, section) []:(スキップ)
Common Name (eg, YOUR name) []:192.168.XXX.XXX
Email Address []:(スキップ)

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:(スキップ)
An optional company name []:(スキップ)

最初にパスワードを聞かれたら、先ほど作った秘密鍵のパスワードを入力。

次に2桁の国識別コードは JP

都道府県、市区町村は任意の値

(スキップ)となっている箇所は空白のままとばしてOK。

Common Name にはブラウザで指定するアドレスを入力するので注意。

https://www.xxx.com/ でアクセスするのであれば xxx.com

https://192.168.XXX.XXX/ でアクセスするのであれば そのIP アドレスを指定する。


証明書を作る

上記でできた秘密鍵と公開鍵 CSR(証明書署名要求)を使って証明書を作成する。

# openssl x509 -in server.csr -days 36500 -req -signkey server.key > server.crt

Signature ok
subject=/C=JP/ST=Chiba/L=Funabashi/O=Default Company Ltd/CN=192.168.XXX.XXX
Getting Private key
Enter pass phrase for server.key:(上記で指定したパスワード)

server.crtというファイル名の証明書ができているはず。

上記の設定では、X.509 形式の証明書ファイルを、有効期間36500日(約100年)の指定にしている。


パスワードの解除(パスワード確認のスキップ)

Apatchの起動時に毎回パスワードを聞かれると面倒なので以下の設定をしておく。

# mv server.key server.key.bak

# openssl rsa -in server.key.bak > server.key
Enter pass phrase for server.key.back:(上記で指定したパスワード)
writing RSA key


証明書の設定

/etc/httpd/conf.d/ssl.confに証明書の設定を追加する。

(ssl.confはmod_sslをインストールした際に作成されているはず)

# vi /etc/httpd/conf.d/ssl.conf

:
<VirtualHost _default_:443>
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile /etc/httpd/conf/server.crt <--ここと
SSLCertificateKeyFile /etc/httpd/conf/server.key <--ここを修正
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
:
</Files>
</VirtualHost>

作成した証明書のパスに修正すればOK。


Apatch リロード&再起動

ApatchをリロードすればOK。

# service httpd configtest

Syntax OK
# service httpd reload
Reloading httpd:

もし設定が反映されていなかったらApatchを再起動してみる。


firewallの設定

上記だけでhttpsにアクセスできるはずだけど、もしタイムアウトとかでhttpsに繋がらなかったらファイアウォールの設定を見てみる。

# firewall-cmd --list --zone=public --permanent

public
target: default
icmp-block-inversion: no
interfaces:
sources:
services: dhcpv6-client http mysql ssh https <--ここ!
ports:
protocols:
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:

servicesのところにhttpやhttpsがなかったら、追加する。

firewall-cmd --permanent --zone=public --add-service=http 

firewall-cmd --permanent --zone=public --add-service=https
firewall-cmd --reload

以上。

2018/04/05 追記

一部間違っている箇所をご指摘いただいたので、修正しました。

勉強不足ですみません。。教えてくださってありがとうございました。