NotesWhat is notes.io?

Notes brand slogan

Notes - notes.io

# Task
* 証明書作成
* プライベート認証局
→ ルート証明書が必要?
→ SSL用とVPN用を別に立てる?
* SSL用
* サーバ証明書(自己署名)
* クライアント証明書(自己CA署名)
* VPN用
* サーバ証明書(自己署名)
* クライアント証明書(自己CA署名)

* 参考URL
* [【図解】よく分かるデジタル証明書(SSL証明書)の仕組み 〜https通信フロー,発行手順,CSR,自己署名(オレオレ)証明書,ルート証明書,中間証明書の必要性や扱いについて〜](https://milestone-of-se.nesuke.com/sv-advanced/digicert/digital-certification-summary/)
*
*
*
* 用語
* Let's Encrypt:無料でSSL証明書を取得することが出来るサービス。≠オレオレ証明書
非営利団体の ISRG (Internet Security Research Group) が運営
* CSR(Certificate Signing Request):証明書発行要求
* 暗号化
* 署名
* 失効処理
* PKI(Public Key Infrastructure):公開鍵基盤
公開鍵暗号やデジタル署名をインターネットによる通信のみで安全に運用するために築かれた社会的基盤。公開鍵暗号を利用するソフトウェアに組み込まれたルート証明書を起点とする認証局間の信頼の連鎖により、公開鍵を安全に配送する。
* CA(Certificate Authority):認証局
認証局にはルート認証局(root CA)と中間認証局(intermediate CA)がある。
* プライベート認証局(プライベートCA、オレオレ認証局):
* ルート証明書:
* SANs(Subject Alternative Names):
* X.509:デジタル証明書および証明書失効リスト(CRL)のデータ形式を定めた標準規格の一つ。
識別名(DN:Distinguished Name)形式で記述され、これは「属性名=値」というフレーズをカンマ区切りで列挙した構文
例)
* 国・地域(Country):「C=JP」
* 組織名(Organization):「O=xxxx」
* 部署名(Organizational Unit):「OU=xxxx」
* 所有者の一般名(個人の氏名や証明書を使用するURL、メールアドレスなど)(Common Name):「CN=xxxx」
* CRL(Certificate Revocation List):証明書失効リスト。
何らかの理由により証明書を有効期限前に無効化するために発行されるリストで、CAが定期的に更新・公表する。
発行者、発行日、次回発行予定日、署名アルゴリズム、リスト本体、拡張領域などが記載され、証明書と同じように末尾に発行者のデジタル署名が添付される。
一つ一つの失効情報(CRLエントリー)は、失効した証明書のシリアル番号、失効日時、失効理由コード、推定無効日などで構成される。
* SHA-256(Secure Hash Algorithm 256-bit):任意の長さの原文から固定長の特徴的な値を算出するハッシュ関数(要約関数)の一つ。
どんな長さの原文からも256ビットのハッシュ値を算出することができる。
SHA-256はNSA(米国家安全保障局)が考案し、2001年にNIST(米国標準技術局)によって連邦情報処理標準の一つ(FIPS 180-4)として標準化された「SHA-2」規格の一部として定義されている。
*
*
*
*
*
* PKCS(Public Key Cryptography Standards)
* PEM(Privacy Enhanced Mail)

* .der:DER形式
* .pem:PEM形式
* .p12:PKCS#12形式
* PXR
* メモ
鍵の用途を指定するパラメータ
digitalSignature デジタル署名
nonRepudiation 否認防止
keyEncipherment 鍵配布
dataEncipherment データ暗号化
keyAgreement 鍵の検証
keyCertSign 鍵署名
cRLSign 証明書失効リスト(CRL)の検証
encipherOnly 暗号化のみ
decipherOnly 復号化のみ

プライベートCA設定
拡張鍵用途
serverAuth TLS Webサーバ認証
clientAuth TLS Webクライアント認証



* nginx
* インストール
* Tomcat連携設定
* WebAPI疎通確認
* SSL サーバ認証設定
* クライアント設定
* SSL クライアント認証設定
* クライアント設定

* VPN
* Azure VPN Gateway設定
* クライアント設定

* KeyVault
* アクセスポリシーの設定
* ADへの登録
[参考:Azure リソースのマネージド ID とは](https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/overview)
[参考:既存の VM でシステム割り当てマネージド ID を有効にする](https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/qs-configure-portal-windows-vm#enable-system-assigned-managed-identity-on-an-existing-vm)
オブジェクトID: ee5ba457-4921-4181-b5cb-4f9eb6a5a80c
[参考:Key Vault に格納されているシークレットへ VM のアクセスを許可する](https://docs.microsoft.com/ja-jp/azure/active-directory/managed-identities-azure-resources/tutorial-linux-vm-access-nonaad)
"id": "/subscriptions/fb612803-3c89-4100-8b1b-7c13434970f0/resourceGroups/KeyMAP-Test/providers/Microsoft.Compute/virtualMachines/KeyMAP-SV",
* システム割り当てマネージド ID ユーザー割り当てマネージド ID

### アクセストークン取得
curl 'http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https%3A%2F%2Fvault.azure.net' -H Metadata:true
{"access_token":"eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCIsImtpZCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2ZlNDIwMjRkLWM2ZTItNDkyMi1iODgwLTI2MTcxYjgxNjU2NC8iLCJpYXQiOjE1NjY0MTA0MTgsIm5iZiI6MTU2NjQxMDQxOCwiZXhwIjoxNTY2NDM5NTE4LCJhaW8iOiI0MkZnWUZqZm90cTRwZUlXMzkwenM3aC8vMTdIQVFBPSIsImFwcGlkIjoiZjdkMTdjMGEtNTJjZi00NmNiLWFiMDAtZDlkM2ZhYTUwZDlmIiwiYXBwaWRhY3IiOiIyIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvZmU0MjAyNGQtYzZlMi00OTIyLWI4ODAtMjYxNzFiODE2NTY0LyIsIm9pZCI6ImVlNWJhNDU3LTQ5MjEtNDE4MS1iNWNiLTRmOWViNmE1YTgwYyIsInN1YiI6ImVlNWJhNDU3LTQ5MjEtNDE4MS1iNWNiLTRmOWViNmE1YTgwYyIsInRpZCI6ImZlNDIwMjRkLWM2ZTItNDkyMi1iODgwLTI2MTcxYjgxNjU2NCIsInV0aSI6IktBbURhMzRBSUVtN1FhUWFIYWtGQVEiLCJ2ZXIiOiIxLjAiLCJ4bXNfbWlyaWQiOiIvc3Vic2NyaXB0aW9ucy9mYjYxMjgwMy0zYzg5LTQxMDAtOGIxYi03YzEzNDM0OTcwZjAvcmVzb3VyY2Vncm91cHMvS2V5TUFQLVRlc3QvcHJvdmlkZXJzL01pY3Jvc29mdC5Db21wdXRlL3ZpcnR1YWxNYWNoaW5lcy9LZXlNQVAtU1YifQ.PJdOKy9x0MdT7qs80KKcaiAERcvcIdvyrucgja8Epc8am2KNPnvHCJM9gRMf8AHVUgmJm4jRANj90Lycv8jH403_6jH4NcfQ8qy4w0SABtKEQDEo8Fx7pdaxjOoxvWb13TbQ2yXXFKMwIPwRh9pexTa-wsXzPfjVlqzZ9LXUiK5lAu26op3pihdRBg2GqZDAH2LSVy6mfdkPFfEyaHV2qLEpZPSV8MzySQtJORXox5TbpghwJk7RoL2weYFk-fQioY_59rfXNuwl0B7YbToTHqitjVixJyjYsmJw36FUtd5UxB4pv9YhaNjDmB3h9iJWsvubPeznZRoDBRIGjnphbQ",
"client_id":"f7d17c0a-52cf-46cb-ab00-d9d3faa50d9f",
"expires_in":"28800",
"expires_on":"1566439518",
"ext_expires_in":"28800",
"not_before":"1566410418",
"resource":"https://vault.azure.net",
"token_type":"Bearer"}


### 変数定義
access_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsIng1dCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCIsImtpZCI6ImllX3FXQ1hoWHh0MXpJRXN1NGM3YWNRVkduNCJ9.eyJhdWQiOiJodHRwczovL3ZhdWx0LmF6dXJlLm5ldCIsImlzcyI6Imh0dHBzOi8vc3RzLndpbmRvd3MubmV0L2ZlNDIwMjRkLWM2ZTItNDkyMi1iODgwLTI2MTcxYjgxNjU2NC8iLCJpYXQiOjE1NjY0MTA0MTgsIm5iZiI6MTU2NjQxMDQxOCwiZXhwIjoxNTY2NDM5NTE4LCJhaW8iOiI0MkZnWUZqZm90cTRwZUlXMzkwenM3aC8vMTdIQVFBPSIsImFwcGlkIjoiZjdkMTdjMGEtNTJjZi00NmNiLWFiMDAtZDlkM2ZhYTUwZDlmIiwiYXBwaWRhY3IiOiIyIiwiaWRwIjoiaHR0cHM6Ly9zdHMud2luZG93cy5uZXQvZmU0MjAyNGQtYzZlMi00OTIyLWI4ODAtMjYxNzFiODE2NTY0LyIsIm9pZCI6ImVlNWJhNDU3LTQ5MjEtNDE4MS1iNWNiLTRmOWViNmE1YTgwYyIsInN1YiI6ImVlNWJhNDU3LTQ5MjEtNDE4MS1iNWNiLTRmOWViNmE1YTgwYyIsInRpZCI6ImZlNDIwMjRkLWM2ZTItNDkyMi1iODgwLTI2MTcxYjgxNjU2NCIsInV0aSI6IktBbURhMzRBSUVtN1FhUWFIYWtGQVEiLCJ2ZXIiOiIxLjAiLCJ4bXNfbWlyaWQiOiIvc3Vic2NyaXB0aW9ucy9mYjYxMjgwMy0zYzg5LTQxMDAtOGIxYi03YzEzNDM0OTcwZjAvcmVzb3VyY2Vncm91cHMvS2V5TUFQLVRlc3QvcHJvdmlkZXJzL01pY3Jvc29mdC5Db21wdXRlL3ZpcnR1YWxNYWNoaW5lcy9LZXlNQVAtU1YifQ.PJdOKy9x0MdT7qs80KKcaiAERcvcIdvyrucgja8Epc8am2KNPnvHCJM9gRMf8AHVUgmJm4jRANj90Lycv8jH403_6jH4NcfQ8qy4w0SABtKEQDEo8Fx7pdaxjOoxvWb13TbQ2yXXFKMwIPwRh9pexTa-wsXzPfjVlqzZ9LXUiK5lAu26op3pihdRBg2GqZDAH2LSVy6mfdkPFfEyaHV2qLEpZPSV8MzySQtJORXox5TbpghwJk7RoL2weYFk-fQioY_59rfXNuwl0B7YbToTHqitjVixJyjYsmJw36FUtd5UxB4pv9YhaNjDmB3h9iJWsvubPeznZRoDBRIGjnphbQ

keyvault_url=keymap-tls-servercert-kc.vault.azure.net

### Key Vault からシークレットを取得
curl https://<YOUR-KEY-VAULT-URL>/secrets/<secret-name>?api-version=2016-10-01 -H "Authorization: Bearer <ACCESS TOKEN>"

secret_name=test/c74aa5e584d34ab0bbda4bb968f89055

curl https://$keyvault_url/secrets/$secret_name?api-version=2016-10-01 -H "Authorization: Bearer $access_token"

{"value":"abc123","contentType":"test","id":"https://keymap-tls-servercert-kc.vault.azure.net/secrets/test/c74aa5e584d34ab0bbda4bb968f89055","attributes":{"enabled":true,"created":1566410919,"updated":1566410919,"recoveryLevel":"Purgeable"}}

### Key Vault からシークレットを取得
curl https://<YOUR-KEY-VAULT-URL>/secrets/<cert-name>?api-version=2016-10-01 -H "Authorization: Bearer <ACCESS TOKEN>"

cert_name=TLS-SelfSignedServerCert/7b672144e1134153a278d929a9c05e86

curl https://$keyvault_url/certificates/$cert_name?api-version=2016-10-01 -H "Authorization: Bearer $access_token"

{"id":"https://keymap-tls-servercert-kc.vault.azure.net/certificates/TLS-SelfSignedServerCert/7b672144e1134153a278d929a9c05e86","kid":"https://keymap-tls-servercert-kc.vault.azure.net/keys/TLS-SelfSignedServerCert/7b672144e1134153a278d929a9c05e86","sid":"https://keymap-tls-servercert-kc.vault.azure.net/secrets/TLS-SelfSignedServerCert/7b672144e1134153a278d929a9c05e86","x5t":"aOIsXIMtbVFy8B5p3qAbhRunnBU","cer":"MIIDQjCCAiqgAwIBAgIQMykLGuJRQguTGIHWax7idjANBgkqhkiG9w0BAQsFADAeMRwwGgYDVQQDExNDTElHZXREZWZhdWx0UG9saWN5MB4XDTE5MDgyMTE0NDEzOVoXDTIwMDgyMTE0NTEzOVowHjEcMBoGA1UEAxMTQ0xJR2V0RGVmYXVsdFBvbGljeTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMFAffNxrR0yn3eg9F8+ajrV8BSHKtjlMspQgt1WVNoXHFjaNdgV8iyexYQcrwuN6r6i6ELH+t2DH4hp8kifOECJ72GLwf2V98mWycYYvlMLFbJWe6sSijPWwefjbOXMUrQ2zIvJ3HivSr232vis2Yb7tCoIpXcG4l3BkTMPAuRKbb33rZHY6WQQMZpJjuvM5bQa//d8Ifb/kU6TcT80RP1JOXmjNNBqaS78HUev06g97Kjt0N5E1+2mDBOEH0i5/KKVlMdkZVTxxB5bmC5UVoYBInkkWtjL/UcAHpcK3dfL02IzMkIPQPaKI5zcq/sOtHGq7muhrZSHaN5QeozMFccCAwEAAaN8MHowDgYDVR0PAQH/BAQDAgG+MAkGA1UdEwQCMAAwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMB8GA1UdIwQYMBaAFK2ve/Brfr2czbaSaVyi3GEDArdEMB0GA1UdDgQWBBStr3vwa369nM22kmlcotxhAwK3RDANBgkqhkiG9w0BAQsFAAOCAQEACkLB4XaL9942YW9rI8yciJcxksbquPbKJUU78ms1poY0b+nmqO8OBH7aT9LUvQLgjhl5jc2b6XU4cH/GRgnkrEpCeGm4964oaeZ3qI8DyxQpL77lGRD+mjt5/VBLDOxT+5a6i2asiXknLRtDP60Gjxe9K9f0I/+a0Z+vfI8DT30nTZJ1fXNAOUbB3baKJ15+nyQ6nyxBoF/sp8HqeKcdme07AdoMVbOBepzo969hiVxh6CDcJYI3y47bGHZ/zyqft35n/EBp/o9hrs/Orz1tUoinkyGlXZAPoQxll7MQJmoim/XcUmI9BhESOg8P1Tka+N3UYC4+mfJPEmdyoYNEGg==","attributes":{"enabled":true,"nbf":1566398499,"exp":1598021499,"created":1566399099,"updated":1566399099,"recoveryLevel":"Purgeable"}}[kmadmin@KeyMAP-SV ~]$




* az vm --secrets
デプロイ後でも設定/更新可能?
sudo find /var/lib/waagent/ -name "*.prv" | cut -c -57


---
---
# Key Vault に格納されている SSL 証明書を使って Azure 内の Linux 仮想マシン上の Web サーバーをセキュリティ保護する
参考:[Azure公式 チュートリアル](https://docs.microsoft.com/ja-jp/azure/virtual-machines/linux/tutorial-secure-web-server)

## **変数定義**
location=japanwest

cmn_name=KeyMAP

rg_name=$cmn_name-Test

keyvault_name=$cmn_name-TLS-ServerCert-KC

ca_name=TLS-SelfSignedServerCert

vm_name=$cmn_name-SV

admin_username=kmadmin

vm_image=CentOS



## **キーコンテナ上に自己署名サーバ証明書を作成**
az group create --name $rg_name --location $location

az keyvault create
--resource-group $rg_name
--name $keyvault_name
--enabled-for-deployment

[参考:Azure CLI と Key Vault を使って自己署名証明書を作成する](https://blog.shibayan.jp/entry/20190207/1549527920)

az keyvault certificate get-default-policy > policy.json

certォルト設定↓
~~~
{
"issuerParameters": { # 証明書の透明
"certificateTransparency": null, # 証明書の透明
"name": "Self"
},
"keyProperties": {
"curve": null,
"exportable": true,
"keySize": 2048,
"keyType": "RSA",
"reuseKey": true
},
"lifetimeActions": [
{
"action": {
"actionType": "AutoRenew"
},
"trigger": {
"daysBeforeExpiry": 90
}
}
],
"secretProperties": {
"contentType": "application/x-pkcs12"
},
"x509CertificateProperties": { # X.509 証明書データ管理
"keyUsage": [ # 鍵の用途
"cRLSign", # 証明書失効リスト(CRL)の検証
"dataEncipherment", # データ暗号化
"digitalSignature", # デジタル署名
"keyEncipherment", # 鍵配布
"keyAgreement", # 鍵の検証
"keyCertSign" # 鍵署名
],
"subject": "CN=CLIGetDefaultPolicy",
"validityInMonths": 12
}
}
~~~

[参考:ポリシー設定値](https://oxynotes.com/?p=4516)

vi policy.json
~~~
{
"issuerParameters": {
"certificateTransparency": null,
"name": "Self"
},
"keyProperties": {
"curve": null,
"exportable": true,
"keySize": 2048,
"keyType": "RSA",
"reuseKey": true
},
"lifetimeActions": [
{
"action": {
"actionType": "AutoRenew"
},
"trigger": {
"daysBeforeExpiry": 90
}
}
],
"secretProperties": {
"contentType": "application/x-pkcs12"
},
"x509CertificateProperties": {
"keyUsage": [
"cRLSign",
"dataEncipherment",
"digitalSignature",
"keyEncipherment",
"keyAgreement",
"keyCertSign"
],
"subject": "CN=CLIGetDefaultPolicy",
"validityInMonths": 12
}
}
~~~



az keyvault certificate create
--vault-name $keyvault_name
--name $ca_name
--policy "$(az keyvault certificate get-default-policy)"

secret=$(az keyvault secret list-versions
--vault-name $keyvault_name
--name $ca_name
--query "[?attributes.enabled].id" --output tsv)

vm_secret=$(az vm secret format --secrets "$secret" -g $rg_name --keyvault $keyvault_name)

### **※CentOSでcloud-initがうまくいかないので、以下割愛**
vi cloud-init-web-server.txt
~~~
#cloud-config
package_upgrade: true
packages:
- nginx
write_files:
- owner: www-data:www-data
- path: /etc/nginx/sites-available/default
content: |
server {
listen 443 ssl;
ssl_certificate /etc/nginx/ssl/mycert.cert;
ssl_certificate_key /etc/nginx/ssl/mycert.prv;
}
runcmd:
- secretsname=$(find /var/lib/waagent/ -name "*.prv" | cut -c -57)
- mkdir /etc/nginx/ssl
- cp $secretsname.crt /etc/nginx/ssl/mycert.cert
- cp $secretsname.prv /etc/nginx/ssl/mycert.prv
- service nginx restart
~~~


## **VMのデプロイ時に、KeyVault上の自己署名サーバ証明書**

az vm create
--resource-group $rg_name
--name $vm_name
--image $vm_image
--admin-username $admin_username
--generate-ssh-keys
--secrets "$vm_secret"

※※※うまくいかないので指定しない※※※ --custom-data cloud-init-web-server.txt


## **SSLポート開放**
az vm open-port
--resource-group $rg_name
--name $vm_name
--port 443


## **nginxインストール、SSL認証設定**



     
 
what is notes.io
 

Notes.io is a web-based application for taking notes. You can take your notes and share with others people. If you like taking long notes, notes.io is designed for you. To date, over 8,000,000,000 notes created and continuing...

With notes.io;

  • * You can take a note from anywhere and any device with internet connection.
  • * You can share the notes in social platforms (YouTube, Facebook, Twitter, instagram etc.).
  • * You can quickly share your contents without website, blog and e-mail.
  • * You don't need to create any Account to share a note. As you wish you can use quick, easy and best shortened notes with sms, websites, e-mail, or messaging services (WhatsApp, iMessage, Telegram, Signal).
  • * Notes.io has fabulous infrastructure design for a short link and allows you to share the note as an easy and understandable link.

Fast: Notes.io is built for speed and performance. You can take a notes quickly and browse your archive.

Easy: Notes.io doesn’t require installation. Just write and share note!

Short: Notes.io’s url just 8 character. You’ll get shorten link of your note when you want to share. (Ex: notes.io/q )

Free: Notes.io works for 12 years and has been free since the day it was started.


You immediately create your first note and start sharing with the ones you wish. If you want to contact us, you can use the following communication channels;


Email: [email protected]

Twitter: http://twitter.com/notesio

Instagram: http://instagram.com/notes.io

Facebook: http://facebook.com/notesio



Regards;
Notes.io Team

     
 
Shortened Note Link
 
 
Looding Image
 
     
 
Long File
 
 

For written notes was greater than 18KB Unable to shorten.

To be smaller than 18KB, please organize your notes, or sign in.