このブログを検索

ラベル openssl の投稿を表示しています。 すべての投稿を表示
ラベル openssl の投稿を表示しています。 すべての投稿を表示

2025/12/13

openssl事例集

openssl.cnfを探す

#find / -name openssl.cnf

/etc/pki/CA/gomibako/openssl.cnf

/etc/pki/tls/openssl.cnf

/etc/ssl/openssl.cnf

/usr/lib/dracut/modules.d/01fips/openssl.cnf


#csrの内容確認

openssl req -in postfix.csr -text -noout


証明書の内容確認

openssl x509 -in monqy.postfix.pem.251213 -text -noout


#postfix用のcsrを作成

openssl req -new -key ./postfix.key -out ./postfix.csr.251213 -extfile ./server.ext

# cat server.ext
[ v3_server ]
basicConstraints = critical, CA:false
keyUsage = digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = DNS:mail.monqy.net

csr(メールサーバ)用
[ v3_req ]
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = serverAuth, clientAuth, codeSigning, emailProtection
subjectAltName = @alt_names
[ alt_names ]
DNS.1 = mail.monqy.net

ca用
[ v3_ca ]
subjectKeyIdentifier=hash
authorityKeyIdentifier=keyid:always,issuer
basicConstraints = critical,CA:true

#CAによる署名
openssl ca -in ./server.csr -keyfile ./private/cakey.pem -cert ./cacert.pem -out ./server.pem -extfile ./myext.txt

#revoke
openssl ca -revoke ./newcerts/06.pem

#pkcs12でエクスポート
openssl pkcs12 -export -out ./server.pfx -inkey ./serverkey.pem -in ./server.pem


証明書更新2025

postfix/dovecotで同じものを使う。

いつもわからなくなるので拡張子として日付をつけることにした。


postfix

/etc/postfix/master.cf

smtpd_tls_cert_file = /etc/postfix/tls/postfix.pem.251213

smtpd_tls_key_file = /etc/postfix/tls/postfix.key


dovecot

/etc/dovecot/conf.d/10-ssl.conf

ssl_cert = </etc/postfix/tls/postfix.pem.251213

ssl_key = </etc/postfix/tls/postfix.key


openssl.cnにSANを設定し、CAでの署名時にextensionsを指定すること。

(以前、テキストにextensionsのみを書いて指定してできたのだがうまくいかなかった)

openssl ca -in ./postfix.csr -keyfile ./private/cakey.pem -cert ./cacert.pem -out ./jesus.postfix.pem -extfile /etc/pki/tls/openssl.cnf -extensions v3_req


2024/11/07

dovecotでsslv3エラーが出るときの証明書

postfix & dovecotでSSL化していたメールサーバーの証明書の期限が切れていたため、更新したのだが下記のエラーが表示される。

2024-11-07T04:35:55.635061+09:00 jesus dovecot: imap-login: Disconnected: Connection closed: SSL_accept() failed: error:0A000412:SSL routines::sslv3 alert bad certificate: SSL alert number 42 (no auth attempts in 0 secs): user=<>, rip=xxx.xxx.xx.xxx, lip=xxx.xxx.xxx.xxx, TLS handshaking: SSL_accept() 


以前は送受信できていて変えたのは証明書だけだから証明書の問題かなと思い、何度も証明書を作り直したのだがなおらない。

ログをみると sslv3 と書いてあるが、sslv3はもう使用されない、使用すべきでない古いプロトコルである。

postfix&dovecot でプロトコルバージョンの設定をしたが変わらない。

ログの内容でググると、「証明書が中間証明書を含んだチェーンんになっていない」という情報が出てくるのだが、チェーン証明書など使わないでも以前は送受信できていたので関係ないと思っていた。

DovecotのSSLエラー - GentooやIoTの覚え書きブログ

しかしどうしてもなおらないので、下記を参考にチェーン証明書を作って置き換えてみたらうまくいった....

OpenSSLでチェーン証明書を作成する方法 #OpenSSL - Qiita

しかしなんでチェーン証明書でないとsslv3のエラーになるのか... 納得いかない...

チェーン証明書の作り方なんて知らなかったから、間違いなく以前は普通のサーバー証明書で動いていたはず。


ちなみに証明書はopensslを使って作った自己CA(?)で署名したヤツである。


2024/11/06

CA構築 2024

ubuntu 
サーバはj***、digital oceanのvps
Ubuntu

opensslのconfigは /etc/ssl/openssl.cnf

/etc/pki/CA に移動する。
ここで全部やる。

openssl.cnfを /etc/pki/CAにコピーする。

openssl.cnfを編集

[ CA_default ]
dir             = .            # Where everything is kept
private_key     = $dir/cakey.pem # The private key

[ req_distinguished_name ]
国とかcityとかのデフォルト値を入れておく


v3_ca
というファイルを作って下記を記載し、署名時に使う
(opnessl.cnfの[v3_ca]セクションに書いたら行けると思ったがだめだったので)
 
basicConstraints = critical, CA:true
keyUsage = critical, cRLSign, keyCertSign
subjectKeyIdentifier=hash


#これをやっておく

touch index.txt
echo 00 > serial

#ca証明書のcsr発行

 openssl req -new -key ./cakey.pem -out ./ca.csr

※openssl.cnfにkeyの場所を書いたつもりだが効かないので指定した
なぜ効かないとわかったかというとパスワードを聞かれたから


#CA証明書のCSRにサイン

openssl ca -in ca.csr -selfsign \
-notext -config openssl.cnf -outdir . \
-extfile v3_ca -out cacert.pem\
-startdate 241101000000Z -enddate 251031235959Z

いつもつけていなかったが、-notextを指定すると読める情報が書かれない(あっても問題ない)

-extfile v3_ca がさっきのCA情報

これもいつもやらないが、-startdate -enddateを明示的に指定。
指定しないと作った時間になって切りが悪いのでこっちの方がいい。

openssl x509 -in cacert.pem -text

中身を確認

 Version: 3 であること

下記があること

 X509v3 extensions:
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign

※この後別のcentos9のサーバでCA証明書を作ったが上記オプションがなくても問題なく使えた。

#iPhoneにCA証明書をインストール

証明書をテキストにコピーし、拡張子.crt (.pemでもいいはず)にして
メールでiPhoneに送る。

証明書をiPhoneにダウンロードして開き、インストールする。
(私はapple watchを使っているので、iphoneとapplewatchのどちらにインストールするかと聞かれた)

※私はiPhoneの言語を英語に設定している

すると、Settings > General > VPN & Device Management の、
DOWNLOADED PROFILE に表示されるのでタップして開くと、Not Verified と表示されている。
中身を見て、「Certificate Authority」がYesになっていること
Versionが3であること
を確認

最初に戻って、右上のInstallをタップ

ここで終わりではない。

General > About > Certificate Trust Settings > ENABLE FULL TRUST FOR ROOT CETIFICATES
で、インストールした証明書を信頼する。


2023/12/03

postfix/dovecot設定@centos9

昨日から今日にかけてpostfix/dovecotの設定をやった。

まずはubuntu 23.10(digital ocean)で、そしてcentos sgreanm release 9(さくらのVPS)で。

同じ設定をしたのだが設定個所や内容は微妙に異なる。osが違うというだけではなく、設定を紹介している人の理解とかやり方によるように見える。つまり、やり方は一つではない。

ubuntuでやった時はgmailのアカウントに送れなかったので、centosでやってみたのだが、こちらはspfもdkimも設定していないのに送れた。

ドメイン名は違っていて、centosでやった方のドメインは逆引きを設定している。逆引きがあれば(spfやdkimがなくても)、gmailに送れるのだろうか?


あと、iphoneの証明書の信頼は、ただCA証明書をインストールするだけではだめで、

Settings > General > About > Certificate Trust Settings 

で、ENABLE FULL TRUST FOR ROOT CERTIFICATESを有効にする必要がある。


証明書を作るとき、サーバの秘密鍵は暗号なしで作るのが楽。

いつもこういう風にしているが、

#openssl genrsa -aes256 -out ./server.key

Enter PEM pass phrase:


これでよい。

# openssl genrsa -out ./server.key


秘密鍵を暗号化して作った場合でも、以下のようにして解除できる(パスワードを入力する必要あり)。

# openssl rsa -in server.key -out server.key


また、暗号化した秘密鍵を使って、パスワードを設定する方法もある。

2023/11/09

globalprotectのアンインストール

最近MacBookを使っている。別に必要だからではなく、せっかく二十数万円出して買ったのに使わないでいるのがもったいないからだ。

買った直後は興味もあったし勉強的な意味でもいろんなことをやってはみたが、何をやってもWindowsとの勝手の違いにイライラし、別にMacじゃないとできないことなどほとんどないし、と、いつの間にかほとんど使わなくなった。

とにかく画面はきれい。写真や動画がすごくきれいなのは気持ちいい。でも、それだけ。

同じ部屋でWindowsのノートPCと並べてWifiにつないで使っていたが、Macの方だけすぐ切れる。つなぎなおすとつながる。今まではそんなことはなかったが、引っ越したばかりの部屋で新しいWifiルータなので、それとの相性のようなものだろうか。

いろんなVPN設定がある。OpenVPN, Forticlient, globalprotect...

必要ないのでアンインストールしていったが、globalprotectはアンインストールできない。調べるとインストーラを起動してアンインストールを選択する必要があるらしい。インストーラが残っていないかと探したが残っていない。インストーラはpaloaltoに設定された「ポータル」にアクセスしてダウンロードする必要がある。ポータルへのアクセスは認証が必要である。インストールしてあるのだからポータルを設定して証明書も発行したのだが、まあまあ面倒くさかった覚えがある。またアクセスすればいいと思ったがpaloaltoの設定を見ると証明書の有効期限が失効している。

とりあえずポータルにアクセスできてglobalprotectのインストーラが落とせればいいのだが、認証が必要なので証明書の発行からやり直す必要がある... もうどこをやればいいのかわからないので、globalprotectの設定を全部やり直した。

paloaltoのバージョンもだいぶ上がっていたので最新にした。ただ最新にするには段階を踏む必要があり、アンチウィルスなどのパッチも必要なものが適用されている必要があるようでだいぶ時間がかかった。

証明書は今回のようなことがあると面倒だから有効期限10年とかで作ったらいざアクセスしたときにエラーになってしまう。作ってインストールすることはできるのだが、クライアントからアクセスするとエラーになり、強行もできない。それも、ブラウザとかOSとかによってできたりできなかったりする。

で、結局globalprotectでVPN接続して、消さずに残しておくことにした。


2022/02/12

openvpn@centos8 第3回 証明書, iPhone, Mac

サーバがcentos8, クライアントがWindows10で、static keyで接続できた。

その時のクライアント側configをiPhoneにメールで転送してopenvpnアプリに追加して接続しようとすると、 CA not defined というエラーになって接続できない。

このあたりはOSの種類やバージョンによって変わってくることは、違うvpnを設定した時にもあったことだ。 apple製品はこの辺がwindowsより厳しくなっている。

まあ最初から証明書は作るつもりだったので。

証明書はopensslでやる。

サーバの秘密鍵を作る→csr作成→caで署名

ここは何度もやったので省略

opensslの設定はほぼデフォルト

configはサンプルをコピーして作る。configの置き場は /etc/openvpn/server/

# cp /usr/share/doc/openvpn/sample/sample-config-files/server.conf /etc/openvpn/server/

なるべくデフォルト設定を使う。

以下のファイルが必要

ca ca.crt #VPNサーバの証明書を発行(署名)するCAの証明書
cert server.crt #VPNサーバの証明書
key server.key #VPNサーバの秘密鍵

#   openssl dhparam -out dh2048.pem 2048
dh dh2048.pem # DHパラメータ

#   openvpn --genkey --secret ta.key
#
# The server and each client must have
# a copy of this key.
# The second parameter should be '0'
# on the server and '1' on the clients.
tls-auth ta.key 0 # This file is secret # tlsキー、後ろの数字は0がサーバー、1がクライアント

dhパラメータをeasyrsaで作るように説明している情報が多いがsampleコンフィグにopensslのコマンドが書いてあるのでそれを使う。

ごちゃごちゃやったが結局つながったので、configを載せておく。 サーバ証明書とクライアント証明書での接続

サーバ(コメント部分削除)
port 1194
proto udp
dev tun
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.55.0 255.255.255.0"
keepalive 10 120
tls-auth ta.key 0
persist-key
persist-tun
status openvpn-status.log
log-append  openvpn.log
verb 4
explicit-exit-notify 1

外部ファイル(server.confと同じフォルダ /etc/openvpn/server に置く) ca.crt
server.crt
server.key
dh2048.pem

pushは接続先のプライベートネットワークセグメント(アクセス先)
加えてサーバ側のfirewalld設定やip forwardingの設定が必要(前回の記事を参照)
ログ出力設定はデフォルトで無効だが有効にした

クライアント(windows) ※タグが表示されるように<>の前後にスペースを入れてある
client
remote vpn.example.com
port 1194
proto udp
dev tun
tls-auth ta.key 1
persist-tun
persist-key
verb 4
mute 10

< ca >
-----BEGIN CERTIFICATE-----
(省略、サーバ証明書にサインしたCAの証明書)
-----END CERTIFICATE-----
< /ca >
< cert >
-----BEGIN CERTIFICATE-----
(省略、クライアント証明書)
-----END CERTIFICATE-----
< /cert >
< key >
-----BEGIN RSA PRIVATE KEY-----
(省略、クライアントの秘密鍵)
-----END RSA PRIVATE KEY-----
< /key >

外部ファイル
ta.key

client が必要

クライアント(iPhone 15.2.1, Mac Monterey Version12.2)
client
remote www.monqy.net
port 1194
proto udp
dev tun
persist-tun
persist-key
verb 4
mute 10
key-direction 1
< ca >
-----BEGIN CERTIFICATE-----
(省略、サーバ証明書にサインしたCAの証明書)
-----END CERTIFICATE-----
< /ca >
< cert >
-----BEGIN CERTIFICATE-----
(省略、クライアント証明書)
-----END CERTIFICATE-----
< /cert >
< key >
-----BEGIN RSA PRIVATE KEY-----
(省略、クライアントの秘密鍵)
-----END RSA PRIVATE KEY-----
< /key >
< tls-auth >
-----BEGIN OpenVPN Static key V1-----
(省略、ta.keyの中身)
-----END OpenVPN Static key V1-----
< /tls-auth >
ポイントは、 tls-auth ta.key 1 と書くところは ta.keyの内容を< tls-auth >に貼り付けて、
key-direction 1 (client側を意味する) を書く。

2022/02/06

CA作り直し

何度やっても忘れる...
#opensslの設定ファイル場所

/etc/pki/tls/openssl.cnf


#抜粋

####################################################################
[ ca ]
default_ca      = CA_default            # The default ca section

####################################################################
[ CA_default ]

dir             = /etc/pki/CA           # Where everything is kept
certs           = $dir/certs            # Where the issued certs are kept
crl_dir         = $dir/crl              # Where the issued crl are kept
database        = $dir/index.txt        # database index file.
#unique_subject = no                    # Set to 'no' to allow creation of
                                        # several certs with same subject.
new_certs_dir   = $dir/newcerts         # default place for new certs.

certificate     = $dir/cacert.pem       # The CA certificate
serial          = $dir/serial           # The current serial number
crlnumber       = $dir/crlnumber        # the current crl number
                                        # must be commented out to leave a V1 CRL
crl             = $dir/crl.pem          # The current CRL
private_key     = $dir/private/cakey.pem# The private key


なるべくデフォルト値を使う
ファイル名は、キーは xxxkey.pem 証明書は xxxcert.pem とする。

コマンドは /etc/pki/CA で実行する。

CAの秘密鍵の場所は /etc/pki/CA/private.cakey.pem
CA証明書は /etc/pki/CA/cacert.pem



#CAの秘密鍵生成

[root@god tls]# openssl genrsa -aes256 -out ./private/cakey.pem
Generating RSA private key, 2048 bit long modulus (2 primes)
..............+++++
..............+++++
e is 65537 (0x010001)
Enter pass phrase for ./private/cakey.pem:
Verifying - Enter pass phrase for ./private/cakey.pem:



#CA秘密鍵の場所

/etc/pki/CA/private/cakey.pem



#CAのcsr作成(openssl.cnfにデフォルト値を設定)

root@god tls]# openssl req -new 
-key ./private/cakey.pem 
-out ./cacert.csr

Enter pass phrase for ./private/cakey.pem:
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) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Shinjuku]:
Organization Name (eg, company) [example]:
Organizational Unit Name (eg, section) [tech]:
Common Name (eg, your name or your server's hostname) []:myca.example.com
Email Address []:

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



#CAのcsrに自己署名してCAの証明書を生成(1行で入れる)

openssl x509 -days 365 -in ./cacert.csr 
-req -signkey ./private/cakey.pem 
-out ./cacert.pem

/etc/pki/CA/cacert.pem



#以下、サーバ証明書作成
#今回作成する証明書はpaloaltoのglobal protectで使う

#サーバの秘密鍵作成

[root@god tls]# openssl genrsa -aes256 -out ./gpkey.pem 2048
Generating RSA private key, 2048 bit long modulus (2 primes)
.................................................................+++++
...................+++++
e is 65537 (0x010001)
Enter pass phrase for ./gpkey.pem:
Verifying - Enter pass phrase for ./gpkey.pem:


/etc/pki/CA/gpkey.pem



#サーバのCSR発行(1行で)

[root@god tls]# openssl req 
-new -key ./gpkey.pem 
-out ./gp.csr


Enter pass phrase for ./gpkey.pem:
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) [JP]:
State or Province Name (full name) [Tokyo]:
Locality Name (eg, city) [Shinjuku]:
Organization Name (eg, company) [example]:
Organizational Unit Name (eg, section) [tech]:
Common Name (eg, your name or your server's hostname) []:hoge.example.com
Email Address []:

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


/etc/pki/CA/gp.csr


#拡張属性指定

[root@god CA]# cat myext.txt
extendedKeyUsage = 1.3.6.1.5.5.7.3.1
subjectAltName=DNS:hoge.example.com



global protectは下記の情報を参考に設定した。
paloaltoではCA証明書とサーバ証明書を発行できる。(自己署名)
しかし、その証明書を使うとiphone接続時に証明書のエラーになってしまう。
https://hirotanoblog.com/paloalto-globalprotect-local-db/4784/#toc1

iOSやmacosでは、拡張属性が設定されている必要があるらしい。
https://support.apple.com/en-in/HT210176

そのためにわざわざcentosのopensslで証明書を発行した。



CAサイン=証明書発行
#実際は1行で入力
[root@god CA]# openssl ca -in ./gp.csr 
-keyfile ./private/cakey.pem 
-cert ./cacert.pem 
-out ./gp.pem 
-extfile ./myext.txt


Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ./private/cakey.pem:
Check that the request matches the signature
Signature ok
ERROR:There is already a certificate for /C=JP/ST=Tokyo/O=example/OU=tech/CN=hoge.example.com
The matching entry has the following details
Type          :Valid
Expires on    :320203233742Z
Serial Number :06
File name     :unknown
Subject Name  :/C=JP/ST=Tokyo/O=example/OU=tech/CN=hoge.example.com
[root@god CA]#


#前回発行した証明書が有効なためerrorが出た。
#よくあるケースなのであえて残す
#この場合はrevokeする

[root@god CA]# ls ./newcerts/ -l
合計 32
-rw-r--r--. 1 root root 4002  6月  5  2021 01.pem
-rw-r--r--. 1 root root 4002  6月  6  2021 02.pem
-rw-r--r--. 1 root root 4002  6月  6  2021 03.pem
-rw-r--r--. 1 root root 4002  6月  6  2021 04.pem
-rw-r--r--. 1 root root 4161  2月  6 08:31 05.pem
-rw-r--r--. 1 root root 5631  2月  6 08:37 06.pem
[root@god CA]# openssl ca -revoke ./newcerts/06.pem
Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for /etc/pki/CA/private/cakey.pem:
Revoking Certificate 06.
Data Base Update


#再署名

[root@god CA]# openssl ca -in ./gp.csr 
-keyfile ./private/cakey.pem -cert ./cacert.pem 
-out ./gp.pem 
-extfile ./myext.txt

Using configuration from /etc/pki/tls/openssl.cnf
Enter pass phrase for ./private/cakey.pem:
Check that the request matches the signature
Signature ok
Certificate Details:
        Serial Number: 7 (0x7)
        Validity
            Not Before: Feb  6 01:15:35 2022 GMT
            Not After : Feb  6 01:15:35 2023 GMT
        Subject:
            countryName               = JP
            stateOrProvinceName       = Tokyo
            organizationName          = example
            organizationalUnitName    = tech
            commonName                = hoge.example.com
        X509v3 extensions:
            X509v3 Extended Key Usage:
                TLS Web Server Authentication
            X509v3 Subject Alternative Name:
                DNS:hoge.example.com
Certificate is to be certified until Feb  6 01:15:35 2023 GMT (365 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated



#作った証明書の中身を確認


[root@god CA]# openssl x509 -in ./gp.pem -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 7 (0x7)
        Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = JP, ST = Tokyo, L = Shinjuku, O = example, OU = tech, CN = myca.example.com
        Validity
            Not Before: Feb  6 01:15:35 2022 GMT
            Not After : Feb  6 01:15:35 2023 GMT
        Subject: C = JP, ST = Tokyo, O = example, OU = tech, CN = hoge.example.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                RSA Public-Key: (2048 bit)
                Modulus:
                    00:b2:de:1f:bb:12:39:56:0f:4b:77:9c:5f:96:d2:
(略)
                    87:27:1a:0f:42:d8:f8:bd:b3:3c:25:dd:be:fa:92:
                    1f:bb
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Extended Key Usage:
                TLS Web Server Authentication
            X509v3 Subject Alternative Name:
                DNS:hoge.example.com
    Signature Algorithm: sha256WithRSAEncryption
         66:76:ea:36:f8:9d:19:16:6f:3a:6c:1d:c1:b0:a8:f1:89:88:
(略)
         0b:74:e9:7e:f5:a1:ae:e1:a5:aa:b6:6b:62:7a:a8:14:7c:6a:
         b6:53:a5:d8
-----BEGIN CERTIFICATE-----
MIIDczCCAlugAwIBAgIBBzANBgkqhkiG9w0BAQsFADBrMQswCQYDVQQGEwJKUDEO
(略)
dxQmAodMgTX6seEhz5DKzhUMG3Aie3pLVFnzuW27FPwTIxa2wt5lAvoBDGb5pWrb
tAt06X71oa7hpaq2a2J6qBR8arZTpdg=
-----END CERTIFICATE-----
[root@god CA]#


#証明書と秘密鍵を pfx形式にする

[root@god CA]# openssl pkcs12 -export 
-out ./gp.pfx 
-inkey ./gpkey.pem 
-in ./gp.pem

Enter pass phrase for ./gpkey.pem:
Enter Export Password:
Verifying - Enter Export Password:



pfxファイルをダウンロードする

tera termのSSH SCPが簡単

ファイルの属性を 666にしてから(最低必要な権限は何だろう?)

chmod 666 gp.pfx



#2023/11 追記
証明書をインポートするとき、CA証明書とサーバ証明書をインポートする。
CA証明書とサーバ証明書の組織は同じであること。
サーバ証明書は秘密鍵もインポートする。(インポート時に指定する)
CA証明書は「信頼されたルートCA」にする。

2021/06/06

postfixとdovecotの証明書更新

 先日適当にやってなんとか使えるようになっていたメールサーバの証明書が有効期限がすぎて、

iphoneでしつこく警告が表示されるようになったので証明書を更新したのだが、

その際にちょっと苦労したのでメモ。


まず、前提条件

・CAとメールサーバは同じサーバ。同じcn

・postfixとdovecotで使用する証明書は同じ


今回はcaの秘密鍵や証明書がどこにあるのが最新だかわからなくなってしまったので、

全部最初から作り直した。


やること。

1. caの秘密鍵生成

2. caの証明書作成(csrを発行して署名)

3. サーバの秘密鍵生成

4. サーバ証明書作成(csrを発行して署名)


postfixとdovecotの設定ファイルに証明書と秘密鍵の場所を設定する。


# grep smtpd_tls /etc/postfix/main.cf

smtpd_tls_cert_file = /etc/pki/tls/certs/server.crt

smtpd_tls_key_file = /etc/pki/tls/private/server.key


# grep tls /etc/dovecot/dovecot.conf

ssl_cert = </etc/pki/tls/certs/server.crt

ssl_key = </etc/pki/tls/private/server.key

ssl_ca = </etc/pki/tls/certs/ca.crt


# grep tls /etc/dovecot/conf.d/10-ssl.conf

ssl_cert = </etc/pki/tls/certs/server.crt

ssl_key = </etc/pki/tls/private/server.key


postfixやdovecotの設定パラメータやその書き方はよく変わる。

古い設定もしばらくは有効らしいがきっとそのうち使えなくなるので

なるべく最新にする。


ログを見ていると最新じゃないとかこの設定はいらないとか出ている。


サーバ秘密鍵は暗号化してしまうとダメときいたので暗号化しないようにした。





caで署名するときに秘密鍵や証明書を指定しないと設定ファイルの値を使うので、

設定ファイルを直すか、明示的に指定すること。

もしたまたま秘密鍵や証明書が存在していると、意図しないものを使ってしまうことになり、あとで正しい証明書として認識されないので注意。


わからなくなったら全部消してやり直すべし。


/var/log/maillog を見ていれば何が悪いかはだいたいわかる。



ca証明書をクライアントにインストールする。

私の場合iphoneでしか使わない。

iphoneの場合、pem形式のファイルをメールに添付して送ると開いたときにプロファイルとして保存されるので、それをインストールする。



2021/05/07

postfixとdovecotのSSL化@CentOS8

iphoneのメール設定の現状確認

outgoing server
 SMTP: 
       Use SSL: on
       Authentication: Password
       Server Port: 587

Advanced - Incoming Settings
  Use SSL: off
  Authentication: Password
  IMAP Path Prefix: /
  Server Port: 143

この状態で送受信できている。

postfixはssl対応できている。

Incoming Settingsで、 Use SSLをonにすると、

Server Portが 993になるが、設定検証でnot respondingとなる。

dovecotがssl対応していない

一応、postfixの設定確認

/etc/postfix/main.cf
smtp_tls_security_level = may
→これでtlsが有効になっている
※smtpd_enforce_tls=yes は古い設定

tlsの付く設定は

smtpd_tls_cert_file = /etc/pki/tls/certs/postfix.pem
smtpd_tls_key_file = /etc/pki/tls/private/postfix.key
smtp_tls_CApath = /etc/pki/tls/certs
smtp_tls_CAfile = /etc/pki/tls/certs/ca-bundle.crt
smtpd_tls_security_level = may

証明書関連ファイルの確認

postfix.pem
postfix.key
ca-bundle.crt
 -> /etc/pki/ca-trust/extracted/openssl/ca-bundle.trust.crt

これらの証明書は存在していて、タイムスタンプがどうやらcentos8をインストールした日のようだ。

最初から入っていた?

とりあえず動いてるっぽい。

dovecotの設定

/etc/dovecot/dovecot.conf

protocols=imap pop3

で、imaps pop3sが有効になっていない?

protocols=imap3 pop3s

に変更してdovecot再起動すると

 5月 07 10:13:53 god dovecot[1269884]: doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:28: 
 ssl_cert_file has been replaced by ssl_cert = <file
 5月 07 10:13:53 god dovecot[1269884]: doveconf: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:29: 
 ssl_key_file has been replaced by ssl_key = <file
 5月 07 10:13:53 god dovecot[1269884]: master: Dovecot v2.3.8 (9df20d2db) starting up for imap, pop3
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: NOTE: 
 You can get a new clean config file with: doveconf -Pn > dovecot-new.conf
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 
 'imaps' protocol can no longer be specified (use protocol>
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:26: 
 'pop3s' protocol can no longer be specified (use protocol>
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:28: 
 ssl_cert_file has been replaced by ssl_cert = <file
 5月 07 10:13:53 god dovecot[1269887]: config: Warning: Obsolete setting in /etc/dovecot/dovecot.conf:29: 
 ssl_key_file has been replaced by ssl_key = <file

古い設定方法だったようだ。

imaps pop3sは imap pop3に戻す

/etc/dovecot/conf.d/10-ssl.conf

に設定する

ssl = no

を変更

ssl = yes

下記設定はデフォルトなのだが、見るとやっぱり証明書がある。

ssl_cert = </etc/pki/dovecot/certs/dovecot.pem
ssl_key = </etc/pki/dovecot/private/dovecot.pem

firewalldでimaps pop3sを開ける

# firewall-cmd --add-service={pop3s,imaps} --permanent
success

# firewall-cmd --reload
success

# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth0
  sources:
  services: cockpit dhcpv6-client dns http imap imaps pop3 pop3s samba smtp smtp-submission smtps
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

dovecot再起動すると

May  7 10:27:57 god dovecot[1270364]: imap-login: Error: Failed to initialize SSL server context: 
Can't load DH parameters: error:1408518A:SSL routines:ssl3_ctx_ctrl:dh key too small: 

セキュリティ的に厳しくなった的なことらしい。

https://doteya.at.webry.info/201907/article_5.html
5月 07 10:34:05 god dovecot[1270813]: doveconf: Warning: 
Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: ssl_>
 5月 07 10:34:05 god dovecot[1270813]: master: Dovecot v2.3.8 (9df20d2db) 
 starting up for imap, pop3
 5月 07 10:34:05 god dovecot[1270816]: config: Warning: 
 NOTE: You can get a new clean config file with: doveconf -Pn >>
 5月 07 10:34:05 god dovecot[1270816]: config: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:28: ssl_cert_fil>
 5月 07 10:34:05 god dovecot[1270816]: config: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:29: ssl_key_file>
 5月 07 10:34:05 god dovecot[1270816]: config: Warning: 
 Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: ssl_dh>
 5月 07 10:34:06 god dovecot[1270816]: config: Warning: 
 please set ssl_dh=

ssl_dh= を設定してください、だそうだ。

下記設定を書いて、dh.pemを作成する。

# DH parameters length to use.
# 2021/05/07
#ssl_dh_parameters_length = 1024
ssl_dh_parameters_length = 2048
ssl_dh=</etc/dovecot/dh.pem


# openssl dhparam 2048 -out /etc/dovecot/dh.pem
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
..............................
(略)

take a long timeと表示されるが1分もかからない

dovecot再起動すると

May  7 10:37:28 god dovecot[1271026]: doveconf: Fatal: 
Error in configuration file /etc/dovecot/conf.d/10-ssl.conf 
line 51: ssl_dh: Can't open file /etc/dovecot/dh.pem: No such file or directory

見てみると確かにdh.pemがない。

もう一回やるがやっぱりできない。

ディレクトリを変えてカレントディレクトリに作ったりしても、できない。

調べると、opensslのコマンドオプションの書き方がバージョンにより変わったらしい。

https://iww.hateblo.jp/entry/20191109/dhparam
# openssl dhparam -out /etc/dovecot/dh.pem 2048
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
.............+.................
(略)

# ls -l
合計 32
drwxr-xr-x. 2 root root 4096  5月  7 10:35 conf.d
-rw-r--r--. 1 root root  424  5月  7 10:47 dh.pem
-rw-r--r--. 1 root root 4507  5月  7 10:18 dovecot.conf

dh.pemができた!

dovecotを再起動する。

# systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
   Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
   Active: active (running) since Fri 2021-05-07 10:48:33 JST; 10s ago
     Docs: man:dovecot(1)
           http://wiki2.dovecot.org/
  Process: 1271015 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
  Process: 1271512 ExecStartPre=/usr/libexec/dovecot/prestartscript (code=exited, status=0/SUCCESS)
 Main PID: 1271518 (dovecot)
    Tasks: 4 (limit: 4993)
   Memory: 5.2M
   CGroup: /system.slice/dovecot.service
           tq1271518 /usr/sbin/dovecot -F
           tq1271521 dovecot/anvil
           tq1271522 dovecot/log
           mq1271523 dovecot/config

 5月 07 10:48:33 god systemd[1]: Started Dovecot IMAP/POP3 email server.
 5月 07 10:48:33 god dovecot[1271518]: doveconf: Warning: NOTE: 
 You can get a new clean config file with: doveconf -Pn > dovecot-new.conf
 5月 07 10:48:33 god dovecot[1271518]: doveconf: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:28: 
 ssl_cert_file has been replaced by ssl_cert = <file
 5月 07 10:48:33 god dovecot[1271518]: doveconf: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:29: 
 ssl_key_file has been replaced by ssl_key = <file
 5月 07 10:48:33 god dovecot[1271518]: doveconf: Warning: 
 Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: 
 ssl_dh_parameters_length is no longer needed
 5月 07 10:48:33 god dovecot[1271518]: master: Dovecot v2.3.8 (9df20d2db) 
 starting up for imap, pop3
 5月 07 10:48:33 god dovecot[1271522]: config: Warning: NOTE: 
 You can get a new clean config file with: doveconf -Pn > dovecot-new.conf
 5月 07 10:48:33 god dovecot[1271522]: config: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:28: 
 ssl_cert_file has been replaced by ssl_cert = <file
 5月 07 10:48:33 god dovecot[1271522]: config: Warning: 
 Obsolete setting in /etc/dovecot/dovecot.conf:29: 
 ssl_key_file has been replaced by ssl_key = <file
 5月 07 10:48:33 god dovecot[1271522]: config: Warning: 
 Obsolete setting in /etc/dovecot/conf.d/10-ssl.conf:50: 
 ssl_dh_parameters_length is no longer needed

ssl_dh_parameter_lengthは必要ないようだ。

warningとかはまだ出てるけど、とりあえず動いたっぽい。

iphoneのメールアカウント設定で incoming serverのsslを有効にする。

verifyでサーバ証明書の警告がでた。

continueをタップする。

メールを送ってみる。

受信できた!

これで送受信ともにssl化できた!

2021/03/05

このアプリケーションのデジタル署名は、信頼できる認証局からの証明書を使用して生成されましたが、その認証局によって失効されていないことを確認できません。

 自前サーバの自前CAで署名した自前サーバ証明書をインストールした装置にアクセスしたときに、こんなメッセージが表示された。


「このアプリケーションのデジタル署名は、信頼できる認証局からの証明書を使用して生成されましたが、その認証局によって失効されていないことを確認できません。」


アクセス先装置の証明書を発行したCAの証明書は、アクセス元のPCにインストールしてある。

だから、「信頼できる認証局からの証明書を使用して生成されました」となっている。

だが、CRLを設定していない。


これはgmailのサーバ証明書だが、「CRL配布ポイント」というのがある。

[1]CRL Distribution Point
     Distribution Point Name:
          Full Name:
               URL=http://crl.pki.goog/GTS1O1core.crl

という値が設定されている。

私が自前で発行したサーバー証明書にはこの項目がない。


そうか、CRL配布ポイントを証明書発行のときに設定してやればいいのか....

sanを設定したのと同様にテキスト(ext.txt)に書いて、署名時に -extfile ext.txt
を付けてやればよい。

crlDistributionPoints = URI:https://www.example.com/hoge.crl


これでCRL配布ポイントが証明書に入った。
サーバ証明書を入れ替えて再度アクセスしてみると、

今度は登録した CRL配布ポイントのアクセスが信頼できませんと言われてしまった。

ちょっと考えて、気づいた。

そもそもhttpsアクセスするための証明書なのに、それを検証するCRLの宛先もhttpsになっていたらそれも検証しなければならず、永遠に検証が終わらない。

というわけで、CRL配布ポイントのURLをhttpsでなくhttpにしたら、警告が消えた。

crlDistributionPoints = URI:http://www.example.com/hoge.crl


2017/12/23

証明書が信頼されない2

http://monqy.blogspot.com/2017/12/blog-post_23.html
の続き

証明書内の cnを信頼せず、別のところを見ているらしい。
簡単に偽装できるからだろう。

以下をやってサーバ証明書への署名をすれば対応できると聞いて
やってみたが............

/etc/pki/tls/openssl.confを修正
[ req ]
req_extensions = v3_req

[ usr_cert ]
authorityKeyIdentifier=keyid,issuer:always

[ v3_req ]
subjectAltName = @alt_names

[alt_names]
DNS.1 = example.com
DNS.2 = *.example.com


今度は

NET::ERR_CERT_WEAK_SIGNATURE_ALGORITHM

sha1になってる。


いろいろやったが、結局以下で。
vi ./openssl.cnf
#以下のセクションのパラメータを設定
[ CA_default ]
default_md = sha256

[ req ]
default_bits = 2048
default_md = sha256

[ usr_cert ]
basicConstraints=CA:TRUE
nsCertType = server

[ v3_ca ]
nsCertType = sslCA, emailCA

これをやって、CAを作り直す。

CAを作りなおす場合、
/etc/pki/CA/private/cakey.pem
があると
-newca
をやっても動かないので消す。

あと、いったんできたファイルは全部消しておく。

そんで、サーバの秘密鍵作成、CSR作成、署名をやりなおす。
apacheを再起動、CA証明書は、cacert.pemの最後の

-----BEGIN CERTIFICATE-----
から
-----END CERTIFICATE-----

までをテキストにコピーして拡張子 .crtにすればインポートできる。

chromeもいったん終了して再起動。


晴れてchromeに「保護された通信」と認めてもらえた。







証明書が信頼されない

(追記 証明書の有効期限は長すぎると信頼されなくなるようになっており10年とかにすると信頼されない)

自分のSSLサイトに証明書をつける。 金を出して買うのではない。 自己署名証明書でもない。 CAのお墨付きの証明書だ。 ただし、そのCAは自分で建てる。 結果的には自己署名証明書のようなものだが。 サーバはさくらのVPS、centos 6.9
# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Oct 19 2017 16:43:38
# openssl version
OpenSSL 1.0.1e-fips 11 Feb 2013
下記三つのファイルに有効期限の設定があるが、
/etc/pki/tls/openssl.cnf
#365を3650に

/etc/pki/tls/misc/CA
#365を3650に

/etc/pki/tls/misc/CA
#1095を3650に

1. CAを作る

/etc/pki/tls/misc/CA -newca
CA certificate filename (or enter to create)

#enterを入力

writing new private key to '/etc/pki/CA/private/./cakey.pem'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:

#cakeyのパスワードを2回入力
#以下は適当に
#Common NameはURLとして入力するホスト名にする。

Country Name (2 letter code) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Tokyo
Organization Name (eg, company) [Default Company Ltd]:example.com
Organizational Unit Name (eg, section) []:example
Common Name (eg, your name or your server's hostname) []:example.com
Email Address []:mail@example.com
以下は何も入力せずにenterでよい
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
CA証明書は下記にできる
/etc/pki/CA/cacert.pem
CA秘密鍵は
/etc/pki/CA/private/cakey.pam

2. サーバ証明書をつくる 

2-1. サーバ証明書の秘密鍵をつくる
# mkdir /etc/pki/ssl
# cd /etc/pki/ssl
# openssl genrsa -out server.key -aes256 2048
2-2. CSR(Certificate Signing Request)の作成
openssl req -new -key server.key -out server.csr

3. サーバ証明書に署名する

openssl ca -config /etc/pki/tls/openssl.cnf -in server.csr -keyfile /etc/pki/CA/private/cakey.pem -cert /etc/pki/CA/cacert.pem -out server.crt
パスワード、yを2回いれる。 下記のエラーになったときは、
failed to update database
TXT_DB error number 2
/etc/pki/CA/newcerts/に xxxxx.pem というファイルがあるはずなので、
openssl ca -revoke /etc/pki/CA/newcerts/xxxxx.pem
をやってから、署名をもう一度やる。
openssl rsa -in server.key -out server.key

4. apacheの設定

vi /etc/httpd/conf.d/ssl.conf
証明書と秘密鍵が /etc/pki/ssl にあるとして
SSLCertificateFile /etc/pki/ssl/server.crt
SSLCertificateKeyFile  /etc/pki/ssl/server.key
に変更して
service httpd restart
サイトにアクセスすると証明書が信頼できないというエラーが表示される。

証明書を表示すると「この証明書の発行者を検出できませんでした。」 となっている。

5. CA証明書をクライアントにインストール 

Windows10の場合 /etc/pki/CA/cacert.pem をクライアントにコピーし、拡張子を.crtに変える。
ダブルクリックすると証明書として表示されるので、「証明書のインストール」をクリックする。 ウィザードが走るのでインストールする。
私は「ローカルコンピューター」「信頼されたルート証明機関」にいれた。

さあこれでエラーが表示されなくなった.... と思ったら、ダメだ。
IEはエラーが表示されなくなったが、 chromeとfirefoxは依然として証明書を信頼してくれない。

chromeは
NET::ERR_CERT_COMMON_NAME_INVALID

Firefoxは
SEC_ERROR_UNKNOWN_ISSUER

....。

調べたら、対応策があるようなので、次回。

続き↓ https://monqy.blogspot.com/2017/12/blog-post_87.html

2016/09/17

apacheでhttpsを使う

httpsを使いたい。

別にセキュアにしたいわけではなく、httpsでのアクセスを確認したいだけ。

macでやってみて証明書も自分で発行できて簡単でopensslとかならcentosも同じだろうと、やってみた。

ちょっとゴタゴタしたので、メモしておく。

# which openssl
/usr/bin/openssl

opensslは入っている。


# which mod_ssl
/usr/bin/which: no mod_ssl in (/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin)

mod_sslは入ってない。

じゃあ、入れよう。

# yum install mod_ssl
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * remi-safe: mirrors.tuna.tsinghua.edu.cn
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package mod_ssl.x86_64 1:2.2.15-54.el6.centos will be インストール
--> 依存性の処理をしています: httpd = 2.2.15-54.el6.centos のパッケージ: 1:mod_ssl-2.2.15-54.el6.centos.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: 1:mod_ssl-2.2.15-54.el6.centos.x86_64 (updates)
             要求: httpd = 2.2.15-54.el6.centos
            インストール: httpd-2.2.27-1.el6.x86_64 (@CentALT)
                httpd = 2.2.27-1.el6
            利用可能: httpd-2.2.15-53.el6.centos.x86_64 (base)
                httpd = 2.2.15-53.el6.centos
            利用可能: httpd-2.2.15-54.el6.centos.x86_64 (updates)
                httpd = 2.2.15-54.el6.centos
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest


入らない。

apacheのバージョンが新しすぎるようだ。

別にバージョンなんかなんでもいいので、ダウングレードしよう。


yum downgradeをやってみたができないので、消して入れなおす。

# yum remove httpd

消えた。

インストール

# yum install httpd
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.iij.ad.jp
 * epel: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * ius: hkg.mirror.rackspace.com
 * remi-safe: mirrors.tuna.tsinghua.edu.cn
 * updates: ftp.iij.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package httpd.x86_64 0:2.2.15-54.el6.centos will be インストール
--> 依存性の処理をしています: httpd-tools = 2.2.15-54.el6.centos のパッケージ: httpd-2.2.15-54.el6.centos.x86_64
--> 依存性解決を終了しました。
エラー: パッケージ: httpd-2.2.15-54.el6.centos.x86_64 (updates)
             要求: httpd-tools = 2.2.15-54.el6.centos
            インストール: httpd-tools-2.2.27-1.el6.x86_64 (@CentALT)
                httpd-tools = 2.2.27-1.el6
            利用可能: httpd-tools-2.2.15-53.el6.centos.x86_64 (base)
                httpd-tools = 2.2.15-53.el6.centos
            利用可能: httpd-tools-2.2.15-54.el6.centos.x86_64 (updates)
                httpd-tools = 2.2.15-54.el6.centos
            利用可能: httpd24u-tools-2.4.23-2.ius.centos6.x86_64 (ius)
                httpd-tools = 2.4.23-2.ius.centos6
 問題を回避するために --skip-broken を用いることができません
 これらを試行できます: rpm -Va --nofiles --nodigest


できない。

httpd-toolsとやらがひっかかってる。

こいつも消す。



# yum remove httpd-tools
読み込んだプラグイン:fastestmirror, refresh-packagekit, security
削除処理の設定をしています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package httpd-tools.x86_64 0:2.2.27-1.el6 will be 削除
--> 依存性解決を終了しました。

依存性を解決しました

========================================================================================================================
 パッケージ                    アーキテクチャ           バージョン                     リポジトリー                容量
========================================================================================================================
削除:
 httpd-tools                   x86_64                   2.2.27-1.el6                   @CentALT                   137 k

トランザクションの要約
========================================================================================================================
削除                 1 パッケージ

インストール済み容量: 137 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  削除中                  : httpd-tools-2.2.27-1.el6.x86_64                                                         1/1
  Verifying               : httpd-tools-2.2.27-1.el6.x86_64                                                         1/1

削除しました:
  httpd-tools.x86_64 0:2.2.27-1.el6

完了しました!


「will be 削除」(笑い)


インストール

#yum install httpd

はいった。



# httpd -v
Server version: Apache/2.2.15 (Unix)
Server built:   Jul 18 2016 15:24:00


mod_sslをインストール

# yum install mod_ssl

はいった。


「will be インストール」(笑い)



これで必要なものはそろったので設定をしていく。


httpsサーバを動かすには証明書が必要。

証明書といっても、テストでhttpsアクセスするだけならお金を払って発行してもらう必要はない。

そういう場合は自己署名証明書というものを使う。

いわゆる「オレオレ証明書」である。


(参考)
http://www.maruko2.com/mw/Apache/SSL%E8%87%AA%E5%B7%B1%E8%A8%BC%E6%98%8E%E6%9B%B8%E3%81%AE%E4%BD%9C%E6%88%90%E3%81%A8mod_ssl%E3%81%AE%E8%A8%AD%E5%AE%9A


apache + ssl 設定の方法はいろんな人が書いているが、内容は微妙に異なる。



秘密鍵を作る。

よくわからないが、これがないと証明書が作れないし、簡単に作れるので作る。

暗号の強度とかはどうでもいいがいまどき 3desとか1024は古いのでナウくする。

パスワードを要求されるので2回入力する。

# openssl genrsa -aes128 -out server.key 2048
Generating RSA private key, 2048 bit long modulus
...............................................................................................................................................................................................................................+++
..............................................................................+++
e is 65537 (0x10001)
Enter pass phrase for server.key:
Verifying - Enter pass phrase for server.key:


CSRを作る。

CSRとは証明書を発行する元ネタのようなものだ。
国だの組織名だのいろいろ聞かれるが全部適当でよい。

challenge password、emailだのは入れなくてよい。
というか、確認してないが必須項目はCNのみじゃないだろうか。

CNとはサーバのfqdnだが、自己署名証明書なので一致してなくても関係ないと思う。

一応、本当のfqdnを登録した。

下記のkintamaはもちろんサンプルである。


# openssl req -new -key server.key -sha256 -out 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) [XX]:JP
State or Province Name (full name) []:Tokyo
Locality Name (eg, city) [Default City]:Tokyo
Organization Name (eg, company) [Default Company Ltd]:kintama
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:kintama.net
Email Address []:

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


秘密鍵とCSRがそろったら、証明書を発行する。

有効期間10年。100年とか1000年とかでもできるのだろうか?確認してない。

-in に作成したcsr、 -signkey に作成した秘密鍵の名前を指定する。

-out で指定した名前で作成される。


秘密鍵を作ったときに設定したパスワードを入力する。


# openssl x509 -in server.csr -days 3650 -req -signkey server.key -sha256 -out server.crt
Signature ok
subject=/C=JP/ST=Tokyo/L=Tokyo/O=kintama/CN=kintama.net
Getting Private key
Enter pass phrase for server.key:


証明書ができたら、ssl.confを編集する。

(参考)
http://www.ryouto.jp/linux/linux_44.html


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

変更するのは以下

DocumentRoot "/var/www/html/" #コメントを外す
ServerName kintama.net:443 #サーバ名
SSLCertificateFile /home/kintama/ssl/server.crt #コメントを外して証明書の場所を指定
SSLCertificateKeyFile /home/kintama/server.key #コメントを外して秘密鍵の場所を指定



DocumentRootは任意の場所を指定できる。

つまり、httpとhttpsで違うページを表示できる。

証明書と鍵はさっき作成したものを指定する。

場所と名前はなんでもよいがもちろんそこに先ほど作った秘密鍵と証明書がないとだめだ。



httpdを再起動する。

さっき設定したパスワードを入力する。

# service httpd restart
httpd を停止中:                                            [  OK  ]
httpd を起動中: Apache/2.2.15 mod_ssl/2.2.15 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server kintama.net:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.
                                                           [  OK  ]

iptablesで443を開ける。

-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT


おわり。


おまけ

httpdを再起動するたびにパスワードを入力するのがウザい場合は、
下記で無効にできる。

# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:
writing RSA key

無効にするときにパスワードを聞かれてイラっとするが、これが最後なので我慢する。

centosは6です。

正式なバージョンは.....

# cat /etc/redhat-release
CentOS release 6.8 (Final)