Help us understand the problem. What is going on with this article?

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 追記
一部間違っている箇所をご指摘いただいたので、修正しました。
勉強不足ですみません。。教えてくださってありがとうございました。

miqpim
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした