فرمت PEM یک نوع فرمت ذخیرهسازی فایل برای نگهداشت کلیدها و certificateهای رمزنگاری است. نام کامل این فرمت Privacy-enhanced Electronic Mail و پراستفادهترین فرمت ذخیرهسازی در حوزهی رمزنگاری بهویژه در سیستمهای متن باز است.
برخلاف بیشتر استانداردهای ذخیرهسازی فایلهای رمزنگاری که محتوا را بهشکل binary ذخیره میکنند، فرمت PEM از base64 برای encoding استفاده میکند، این باعث میشود جابهجایی و خوانش فایل بسیار آسانتر شود.
اگرچه پسوند فایلهای در سیستمهای متن باز از اهمیت بالایی برخوردار نیست اما معمولا فایلهای pem اگر کلید خصوصی یا private key را شامل باشند، از پسوند key. و اگر certificate را شامل باشد از پسوند cer. یا crt. یا pem. استفاده خواهند کرد.
فایلهای با فرمت PEM را میتوانید بهراحتی بهکمک یک ویرایشگر متن مانند notepad یا vim باز کنید و محتوای آن را بررسی کنید.
محتوای کلید خصوصی (Private key) شبیه به این خواهد بود:
-----BEGIN PRIVATE KEY----- MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQCuaGs3MHEOUMvO v7QLx1cAgx7BDMHE0eq70/A+JZlYjDL7IAcoubgibfRWyEPombDF/TtnOzuYXuNT tkGVK+iOI3HbTgVANOrhIhTO91Vh3MDBftlNdzsYg4Ct/dZfvwGixgVfOza5nYcP SFJ5r89fre1EV/3QA3m+oPYimejcTCwEcByxxP7unmoxR9wJMYCmF3IOtRKGMhCn IbmIRwvaQ0yeCk9vh4WoZBbqJx4pVXmqz5D4IfDt2E41NiecWVoNHMTEF9xE2Few 3tPyfMMtqQH713DiVNmLBjHkJLK8a/ev2NjFMg8KTZ0hlVyaeBZDPz0iNk3iaeXf pspZ42kPAgMBAAECggEANcqEzufE5spqoaCkskFQBxtpv9bkaITp5fZvEWvdSN8s 1iFBtADb1tqc0qs/rpzAVcBNswAk2FDjwizjO1PojPZHpoEAw5XOn5M4YcEM93rz hHpQIUFV27CrXn58wNkTcxWqEH4d2c/JGSCQN3HO/s6Q8FRHNwHraa0RXQilNlRR OKSyDZTMyTOB0zBxXR5eJ1izXISgJVhL+UTb1VUj+XdhmSVqP45p2dhJWTyGHy6O taQDo7mUB+gTJzmLbFJxX2Hl50mh9R/Y3fLwGyg3uLBiibMq8ajFSPGgRTkdx+EY PjRuDHLZ2qSCwqrUUuI2X1qAaOyLI+hdjlMlz048QQKBgQDk6kC33UmLGQSO+kqz +j8Zh9lnEMU49Gfq0x4VZjnp9qzj9/8Cl+cOoAxcb1ZzQITvGf0ww85dhSPKh68x QSfefJRm1z6JVyjCVOUYWCN3XTxp7tZMXvSe0ED+HWw96EA8P83QqsMLlH6YkZLq as6K4R9iAtO14tIVoPeVAfZLYQKBgQDDCypU6A08aWyt9Bncfb6mUhheL7LFMRK9 fFxvWuSGLSeZ0hFjGGNJjIOcUUZvnXYTYmuYRrNnNtqY/UvB4ubWncbnU6HY/eZS ejWp2GDiU9yGfvGObwoRv7X5341LKR4KJcdsC5QoDl43mceQ5xjXnsECh/Lssm5E GLsWJ/z6bwKBgELtfliDeVIS0XNgGGFAhBxZzKVGkPMS+iL88Km/BqWx+mB4jHVc pjBveM25u6PctEEX7x/Hz9kl6Q34167l5ts0v0rGGcGb2w3eNlEEy/HFL7mlG8Ce bpTUPHxPa+s5sTYsTWd51abYFp9SyIqDCbovEbbdLrraAyRRuLE3LqRhAoGAQ7V5 kZYpGiLDDrRh0fB5IcX4HaJTXi9GAS/N6v5TvNyqFbUeQhdySFMWUUrJt++i0OHm 1isdFqStSFUOWpWJa1HEfgPDeM/TiChSvs6V+5v/P1WMR9T2WukBpGfd5gy1F/K7 gx+V5D3wqT6iUARZ1GiROm61f0QGEW/AatWg9dMCgYAAnR/QIVTUV+LuINT9lBUs v7lqQzo8wUC2Itn6nD3zmKiJb/lvA/jSZAXMGc3oqBS+ocznKrABp39MONj6Bp7l zvrNHuO8L5v7kK24snyyBfyizu03IbkHUOiIs5rXuD1N6fVG2XKQv9QsUm6NZp0o 1uGia9hksHK00QOXRhsGdA== -----END PRIVATE KEY-----
یک نمونه فایل PEM حاوی محتوای Certificate ساختاری شبیه به این خواهد داشت:
-----BEGIN CERTIFICATE----- MIICLDCCAdKgAwIBAgIBADAKBggqhkjOPQQDAjB9MQswCQYDVQQGEwJCRTEPMA0G A1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2VydGlmaWNhdGUgYXV0aG9y aXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdudVRMUyBjZXJ0aWZpY2F0 ZSBhdXRob3JpdHkwHhcNMTEwNTIzMjAzODIxWhcNMTIxMjIyMDc0MTUxWjB9MQsw CQYDVQQGEwJCRTEPMA0GA1UEChMGR251VExTMSUwIwYDVQQLExxHbnVUTFMgY2Vy dGlmaWNhdGUgYXV0aG9yaXR5MQ8wDQYDVQQIEwZMZXV2ZW4xJTAjBgNVBAMTHEdu dVRMUyBjZXJ0aWZpY2F0ZSBhdXRob3JpdHkwWTATBgcqhkjOPQIBBggqhkjOPQMB BwNCAARS2I0jiuNn14Y2sSALCX3IybqiIJUvxUpj+oNfzngvj/Niyv2394BWnW4X uQ4RTEiywK87WRcWMGgJB5kX/t2no0MwQTAPBgNVHRMBAf8EBTADAQH/MA8GA1Ud DwEB/wQFAwMHBgAwHQYDVR0OBBYEFPC0gf6YEr+1KLlkQAPLzB9mTigDMAoGCCqG M49BAMCA0gAMEUCIDGuwD1KPyG+hRf88MeyMQcqOFZD0TbVleF+UsAGQ4enAiEA l4wOuDwKQa+upc8GftXE2C//4mKANBC6It01gUaTIpo= -----END CERTIFICATE-----
تبدیل از سایر فرمتها به PEM
با توجه به این که Certificate خود را از کجا خریداری کردهاید یا چگونه آن رو تولید کردهاید فرمت پیشفرض آن متفاوت است. در بیشتر موارد certificate شما بهشکل پیشفرض با فرمت PEM خواهد بود و نیازی به انجام تغییرات در آن نیست. اما اگر از فرمتهایی مانند PFX-PKCS#12 و یا P7B-PKCS#7 استفاده میکنید، میتوانید بهسادگی آن را به PEM تغییر دهید. برای این کار هم میتوانید از ابزارهای آنلاین مانند اینجا استفاده کنید یا از دستورات OpenSSL استفاده کنید.
* دقت داشته باشید که فایلهای PFX هم زمان دارای کلید خصوصی و Certificate هستند، پس میتوان هم کلید خصوصی و هم certificate را از آن خارج کرد.
Convert DER to PEM
openssl x509 -inform der -in certificate.cer -out certificate.pem
Convert P7B to PEM
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.pem
Convert PFX to PEM
openssl pkcs12 -in certname.pfx -nokeys -out certificate.pem openssl pkcs12 -in certname.pfx -nocerts -out private.key -nodes
ساختن Trust Chain
برای اینکه SSL/TLS Certificate بهدرستی عمل کند و محتوای وبسایت شما بهکمک پروتکل HTTPS در تمامی مرورگرها بدون اخطار نمایش داده شوند، باید بهجای بارگذاری فایل Certificate خود به شکل عادی یک SSL Certificate Trust Chain کامل ایجاد کنید. برای اطلاع از چگونگی انجام این کار راهنمای ساختن Certificate Trust Chain را مطالعه کنید.